// Get the latest frame from hololens media
        // frame source group -- not needed
        unsafe void UpdateHoloLensMediaFrameSourceGroup()
        {
#if ENABLE_WINMD_SUPPORT
            if (!_mediaFrameSourceGroupsStarted ||
                _pvMediaFrameSourceGroup == null)
            {
                return;
            }

            // Destroy all marker gameobject instances from prior frames
            // otherwise game objects will pile on top of marker
            if (_markerGOs.Count != 0)
            {
                foreach (var marker in _markerGOs)
                {
                    Destroy(marker);
                }
            }

            // Get latest sensor frames
            // Photo video
            //SensorFrame latestPvCameraFrame =
            //    _pvMediaFrameSourceGroup.GetLatestSensorFrame(
            //    _sensorType);

            //if (latestPvCameraFrame == null)
            //    return;

            // Detect ArUco markers in current frame
            // https://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#void%20Rodrigues(InputArray%20src,%20OutputArray%20dst,%20OutputArray%20jacobian)
            DetectedChArUcoBoard detectedChArUcoBoard = _pvMediaFrameSourceGroup.DetectChArUcoBoard(_sensorType);

            //detectedArUcoMarkers =
            //    _arUcoMarkerTracker.DetectArUcoMarkersInFrame(latestPvCameraFrame);

            // If we detect a marker, display
            if (detectedChArUcoBoard.DetectedArUcoMarkers.Count != 0)
            {
                // Get pose from OpenCV and format for Unity
                Vector3 position = CvUtils.Vec3FromFloat3(detectedChArUcoBoard.Position);
                position.y *= -1f;
                Quaternion rotation             = CvUtils.RotationQuatFromRodrigues(CvUtils.Vec3FromFloat3(detectedChArUcoBoard.Rotation));
                Matrix4x4  cameraToWorldUnity   = CvUtils.Mat4x4FromFloat4x4(detectedChArUcoBoard.CameraToWorldUnity);
                Matrix4x4  transformUnityCamera = CvUtils.TransformInUnitySpace(position, rotation);

                // Use camera to world transform to get world pose of marker
                Matrix4x4 transformUnityWorld = cameraToWorldUnity * transformUnityCamera;

                // Instantiate game object marker in world coordinates
                var thisGo = Instantiate(
                    markerGo,
                    CvUtils.GetVectorFromMatrix(transformUnityWorld),
                    CvUtils.GetQuatFromMatrix(transformUnityWorld)) as GameObject;

                // Scale the game object to the size of the markers
                thisGo.transform.localScale = new Vector3(markerSize, markerSize, markerSize);
                _markerGOs.Add(thisGo);
            }

            // Remove viewing of frame for now. Getting memory leaks
            // from passing the SensorFrame class object across the
            // WinRT ABI...

            // Convert the frame to be unity viewable
            //var pvFrame = SoftwareBitmap.Convert(
            //    latestPvCameraFrame.SoftwareBitmap,
            //    BitmapPixelFormat.Bgra8,
            //    BitmapAlphaMode.Ignore);

            //// Display the incoming pv frames as a texture.
            //// Set texture to the desired renderer
            //Destroy(_pvTexture);
            //_pvTexture = new Texture2D(
            //    pvFrame.PixelWidth,
            //    pvFrame.PixelHeight,
            //    TextureFormat.BGRA32, false);

            //// Get byte array, update unity material with texture (RGBA)
            //byte* inBytesPV = GetByteArrayFromSoftwareBitmap(pvFrame);
            //_pvTexture.LoadRawTextureData((IntPtr)inBytesPV, pvFrame.PixelWidth * pvFrame.PixelHeight * 4);
            //_pvTexture.Apply();
            //_pvMaterial.mainTexture = _pvTexture;

            myText.text = "Began streaming sensor frames. Double tap to end streaming.";
#endif
        }