private IEnumerator Capture(bool anchor) { yield return(new WaitForSeconds(0.25f)); XRCameraImage image; ARCameraManager cameraManager = sdk.cameraManager; var cameraSubsystem = cameraManager.subsystem; if (cameraSubsystem != null && cameraSubsystem.TryGetLatestImage(out image)) { CoroutineJobCapture j = new CoroutineJobCapture(); j.onConnect = onConnect; j.onFailedToConnect = onFailedToConnect; j.server = this.server; j.token = this.token; j.bank = this.bank; j.run = (int)(this.imageRun & 0xEFFFFFFF); j.index = this.imageIndex++; j.anchor = anchor; Camera cam = Camera.main; Quaternion _q = cam.transform.rotation; Matrix4x4 r = Matrix4x4.Rotate(new Quaternion(_q.x, _q.y, -_q.z, -_q.w)); Vector3 _p = cam.transform.position; Vector3 p = new Vector3(_p.x, _p.y, -_p.z); j.rotation = r; j.position = p; j.intrinsics = ARHelper.GetIntrinsics(cameraManager); j.width = image.width; j.height = image.height; if (rgbCapture) { ARHelper.GetPlaneDataRGB(out j.pixels, image); j.channels = 3; } else { ARHelper.GetPlaneData(out j.pixels, image); j.channels = 1; } j.sessionFirstImage = sessionFirstImage; if (sessionFirstImage) { sessionFirstImage = false; } jobs.Add(j); image.Dispose(); m_cameraShutterClick.Play(); } }
protected override IEnumerator Capture(bool anchor) { yield return(new WaitForSeconds(0.25f)); m_bCaptureRunning = true; float captureStartTime = Time.realtimeSinceStartup; float uploadStartTime = Time.realtimeSinceStartup; XRCpuImage image; ARCameraManager cameraManager = m_Sdk.cameraManager; var cameraSubsystem = cameraManager.subsystem; if (cameraSubsystem != null && cameraSubsystem.TryAcquireLatestCpuImage(out image)) { CoroutineJobCapture j = new CoroutineJobCapture(); j.host = this; j.run = (int)(m_ImageRun & 0xEFFFFFFF); j.index = m_ImageIndex++; j.anchor = anchor; if (gpsOn) { j.latitude = m_Latitude; j.longitude = m_Longitude; j.altitude = m_Altitude; } else { j.latitude = j.longitude = j.altitude = 0.0; } Camera cam = this.mainCamera; Quaternion _q = cam.transform.rotation; Matrix4x4 r = Matrix4x4.Rotate(new Quaternion(_q.x, _q.y, -_q.z, -_q.w)); Vector3 _p = cam.transform.position; Vector3 p = new Vector3(_p.x, _p.y, -_p.z); j.rotation = r; j.position = p; j.intrinsics = ARHelper.GetIntrinsics(); int width = image.width; int height = image.height; byte[] pixels; int channels = 0; if (m_RgbCapture) { ARHelper.GetPlaneDataRGB(out pixels, image); channels = 3; } else { ARHelper.GetPlaneData(out pixels, image); channels = 1; } byte[] capture = new byte[channels * width * height + 1024]; Task <icvCaptureInfo> captureTask = Task.Run(() => { return(Core.CaptureImage(capture, capture.Length, pixels, width, height, channels)); }); Task <string> convertTask = captureTask.ContinueWith <string>((antecedent) => { return(Convert.ToBase64String(capture, 0, antecedent.Result.captureSize)); }); while (!convertTask.IsCompleted) { yield return(null); } j.encodedImage = convertTask.Result; NotifyIfConnected(captureTask.Result); if (m_SessionFirstImage) { m_SessionFirstImage = false; } j.OnStart += () => { uploadStartTime = Time.realtimeSinceStartup; mappingUIManager.SetProgress(0); mappingUIManager.ShowProgressBar(); }; j.OnSuccess += (SDKImageResult result) => { if (result.error == "none") { float et = Time.realtimeSinceStartup - uploadStartTime; Debug.Log(string.Format("Image uploaded successfully in {0} seconds", et)); } mappingUIManager.HideProgressBar(); }; j.OnProgress += (float progress) => { int value = (int)(100f * progress); Debug.Log(string.Format("Upload progress: {0}%", value)); mappingUIManager.SetProgress(value); }; m_Jobs.Add(j); image.Dispose(); float elapsedTime = Time.realtimeSinceStartup - captureStartTime; Debug.Log(string.Format("Capture in {0} seconds", elapsedTime)); } m_bCaptureRunning = false; var captureButton = workspaceManager.captureButton.GetComponent <Button>(); captureButton.interactable = true; }
private IEnumerator Capture(bool anchor) { yield return(new WaitForSeconds(0.25f)); XRCameraImage image; if (m_CameraManager.TryGetLatestImage(out image)) { CoroutineJobCapture j = new CoroutineJobCapture(); j.onConnect = onConnect; j.onFailedToConnect = onFailedToConnect; j.server = this.server; j.token = this.token; j.bank = this.bank; j.run = (int)(this.imageRun & 0xEFFFFFFF); j.index = this.imageIndex++; j.anchor = anchor; Camera cam = Camera.main; Quaternion _q = cam.transform.rotation; Matrix4x4 r = Matrix4x4.Rotate(new Quaternion(_q.x, _q.y, -_q.z, -_q.w)); Vector3 _p = cam.transform.position; Vector3 p = new Vector3(_p.x, _p.y, -_p.z); j.rotation = r; j.position = p; j.intrinsics = ARHelper.GetIntrinsics(m_CameraManager); j.width = image.width; j.height = image.height; if (rgbCapture) { var conversionParams = new XRCameraImageConversionParams { inputRect = new RectInt(0, 0, image.width, image.height), outputDimensions = new Vector2Int(image.width, image.height), outputFormat = TextureFormat.RGB24, transformation = CameraImageTransformation.None }; int size = image.GetConvertedDataSize(conversionParams); j.pixels = new byte[size]; j.channels = 3; GCHandle bufferHandle = GCHandle.Alloc(j.pixels, GCHandleType.Pinned); image.Convert(conversionParams, bufferHandle.AddrOfPinnedObject(), j.pixels.Length); bufferHandle.Free(); } else { XRCameraImagePlane plane = image.GetPlane(0); // use the Y plane j.pixels = new byte[plane.data.Length]; j.channels = 1; plane.data.CopyTo(j.pixels); } j.sessionFirstImage = sessionFirstImage; if (sessionFirstImage) { sessionFirstImage = false; } jobs.Add(j); image.Dispose(); m_cameraShutterClick.Play(); } }
protected override IEnumerator Capture(bool anchor) { yield return(new WaitForSeconds(0.25f)); m_bCaptureRunning = true; XRCameraImage image; ARCameraManager cameraManager = m_Sdk.cameraManager; var cameraSubsystem = cameraManager.subsystem; if (cameraSubsystem != null && cameraSubsystem.TryGetLatestImage(out image)) { CoroutineJobCapture j = new CoroutineJobCapture(); j.host = this; j.run = (int)(m_ImageRun & 0xEFFFFFFF); j.index = m_ImageIndex++; j.anchor = anchor; if (useGPS) { j.latitude = m_Latitude; j.longitude = m_Longitude; j.altitude = m_Altitude; } else { j.latitude = j.longitude = j.altitude = 0.0; } Camera cam = this.mainCamera; Quaternion _q = cam.transform.rotation; Matrix4x4 r = Matrix4x4.Rotate(new Quaternion(_q.x, _q.y, -_q.z, -_q.w)); Vector3 _p = cam.transform.position; Vector3 p = new Vector3(_p.x, _p.y, -_p.z); j.rotation = r; j.position = p; j.intrinsics = ARHelper.GetIntrinsics(); j.width = image.width; j.height = image.height; if (m_RgbCapture) { ARHelper.GetPlaneDataRGB(out j.pixels, image); j.channels = 3; } else { ARHelper.GetPlaneData(out j.pixels, image); j.channels = 1; } if (m_SessionFirstImage) { m_SessionFirstImage = false; } m_Jobs.Add(j); image.Dispose(); } m_bCaptureRunning = false; var captureButton = workspaceManager.captureButton.GetComponent <Button>(); captureButton.interactable = true; }