示例#1
0
        public void GetSupportedCameraConfigurationsWithFilter(
            ARCoreCameraConfigFilter cameraConfigFilter,
            IntPtr cameraConfigListHandle, List <IntPtr> supportedCameraConfigHandles,
            List <CameraConfig> supportedCameraConfigs, DeviceCameraDirection cameraFacingDirection)
        {
            IntPtr cameraConfigFilterHandle = _nativeSession.CameraConfigFilterApi.Create(
                cameraFacingDirection,
                cameraConfigFilter);

            ExternApi.ArSession_getSupportedCameraConfigsWithFilter(
                _nativeSession.SessionHandle,
                cameraConfigFilterHandle,
                cameraConfigListHandle);
            _nativeSession.CameraConfigFilterApi.Destroy(cameraConfigFilterHandle);

            supportedCameraConfigHandles.Clear();
            supportedCameraConfigs.Clear();
            int listSize = _nativeSession.CameraConfigListApi.GetSize(cameraConfigListHandle);

            for (int i = 0; i < listSize; i++)
            {
                IntPtr cameraConfigHandle = _nativeSession.CameraConfigApi.Create();
                _nativeSession.CameraConfigListApi.GetItemAt(
                    cameraConfigListHandle, i, cameraConfigHandle);
                supportedCameraConfigHandles.Add(cameraConfigHandle);
                supportedCameraConfigs.Add(CreateCameraConfig(cameraConfigHandle));
            }
        }
示例#2
0
        public void GetSupportedCameraConfigurations(
            IntPtr cameraConfigListHandle, List <IntPtr> supportedCameraConfigHandles,
            List <CameraConfig> supportedCameraConfigs, DeviceCameraDirection cameraFacingDirection)
        {
            ExternApi.ArSession_getSupportedCameraConfigs(
                m_NativeSession.SessionHandle, cameraConfigListHandle);

            supportedCameraConfigHandles.Clear();
            supportedCameraConfigs.Clear();
            int listSize = m_NativeSession.CameraConfigListApi.GetSize(cameraConfigListHandle);

            for (int i = 0; i < listSize; i++)
            {
                IntPtr cameraConfigHandle = m_NativeSession.CameraConfigApi.Create();
                m_NativeSession.CameraConfigListApi.GetItemAt(
                    cameraConfigListHandle, i, cameraConfigHandle);

                // Skip camera config that has a different camera facing direction.
                DeviceCameraDirection configDirection =
                    m_NativeSession.CameraConfigApi.GetFacingDirection(cameraConfigHandle)
                    .ToDeviceCameraDirection();
                if (configDirection != cameraFacingDirection)
                {
                    continue;
                }

                supportedCameraConfigHandles.Add(cameraConfigHandle);
                supportedCameraConfigs.Add(_CreateCameraConfig(cameraConfigHandle));
            }
        }
示例#3
0
        private CameraConfig CreateCameraConfig(IntPtr cameraConfigHandle)
        {
            DeviceCameraDirection facingDirection =
                _nativeSession.CameraConfigApi.GetFacingDirection(cameraConfigHandle);
            int imageWidth    = 0;
            int imageHeight   = 0;
            int textureWidth  = 0;
            int textureHeight = 0;
            int minFps        = 0;
            int maxFps        = 0;
            CameraConfigDepthSensorUsage depthSensorUsage =
                _nativeSession.CameraConfigApi.GetDepthSensorUsage(cameraConfigHandle);
            CameraConfigStereoCameraUsage stereoCameraUsage =
                _nativeSession.CameraConfigApi.GetStereoCameraUsage(cameraConfigHandle);

            _nativeSession.CameraConfigApi.GetImageDimensions(
                cameraConfigHandle, out imageWidth, out imageHeight);
            _nativeSession.CameraConfigApi.GetTextureDimensions(
                cameraConfigHandle, out textureWidth, out textureHeight);
            _nativeSession.CameraConfigApi.GetFpsRange(
                cameraConfigHandle, out minFps, out maxFps);
            return(new CameraConfig(
                       facingDirection,
                       new Vector2(imageWidth, imageHeight),
                       new Vector2(textureWidth, textureHeight),
                       minFps,
                       maxFps,
                       stereoCameraUsage,
                       depthSensorUsage));
        }
        public IntPtr Create(
            DeviceCameraDirection direction,
            ARCoreCameraConfigFilter filter)
        {
            IntPtr cameraConfigFilterHandle = IntPtr.Zero;

            ExternApi.ArCameraConfigFilter_create(
                _nativeSession.SessionHandle, ref cameraConfigFilterHandle);
            ExternApi.ArCameraConfigFilter_setFacingDirection(
                _nativeSession.SessionHandle, cameraConfigFilterHandle, direction);

            if (filter != null)
            {
                if (filter.TargetCameraFramerate != null)
                {
                    ExternApi.ArCameraConfigFilter_setTargetFps(_nativeSession.SessionHandle,
                                                                cameraConfigFilterHandle, ConvertToFpsFilter(filter.TargetCameraFramerate));
                }

                if (filter.DepthSensorUsage != null)
                {
                    ExternApi.ArCameraConfigFilter_setDepthSensorUsage(_nativeSession.SessionHandle,
                                                                       cameraConfigFilterHandle, ConvertToDepthFilter(filter.DepthSensorUsage));
                }

                if (filter.StereoCameraUsage != null)
                {
                    ExternApi.ArCameraConfigFilter_setStereoCameraUsage(
                        _nativeSession.SessionHandle, cameraConfigFilterHandle,
                        ConvertToStereoFilter(filter.StereoCameraUsage));
                }
            }

            return(cameraConfigFilterHandle);
        }
示例#5
0
 // switch camera button event..
 public void SwitchCameraButtonEvent()
 {
     //DeviceCameraDirection = DeviceCameraDirection.BackFacing;
     if (DeviceCameraDirection.BackFacing == DeviceCameraDirection)
     {
         DeviceCameraDirection = DeviceCameraDirection.FrontFacing;
     }
     else if (DeviceCameraDirection.FrontFacing == DeviceCameraDirection)
     {
         DeviceCameraDirection = DeviceCameraDirection.BackFacing;
     }
 }
        public DeviceCameraDirection GetFacingDirection(IntPtr cameraConfigHandle)
        {
            DeviceCameraDirection direction = DeviceCameraDirection.BackFacing;

            if (InstantPreviewManager.IsProvidingPlatform)
            {
                InstantPreviewManager.LogLimitedSupportMessage("access ARCamera facing direction");
                return(direction);
            }

            ExternApi.ArCameraConfig_getFacingDirection(
                _nativeSession.SessionHandle, cameraConfigHandle, ref direction);

            return(direction);
        }
 internal CameraConfig(
     DeviceCameraDirection facingDirection,
     Vector2 imageSize,
     Vector2 textureSize,
     int minFPS,
     int maxFPS,
     CameraConfigStereoCameraUsage stereoCamera,
     CameraConfigDepthSensorUsage depthSensor) : this()
 {
     FacingDirection   = facingDirection;
     ImageSize         = imageSize;
     TextureSize       = textureSize;
     MinFPS            = minFPS;
     MaxFPS            = maxFPS;
     DepthSensorUsage  = depthSensor;
     StereoCameraUsage = stereoCamera;
 }
示例#8
0
        private void _SetCameraDirection(DeviceCameraDirection cameraDirection)
        {
            // The camera direction has not changed.
            if (m_CachedCameraDirection.HasValue && m_CachedCameraDirection.Value == cameraDirection)
            {
                return;
            }

            if (InstantPreviewManager.IsProvidingPlatform && cameraDirection == DeviceCameraDirection.BackFacing)
            {
                return;
            }
            else if (InstantPreviewManager.IsProvidingPlatform)
            {
                InstantPreviewManager.LogLimitedSupportMessage("enable front-facing (selfie) camera");
                m_CachedCameraDirection = DeviceCameraDirection.BackFacing;
                if (SessionComponent != null)
                {
                    SessionComponent.DeviceCameraDirection = DeviceCameraDirection.BackFacing;
                }

                return;
            }

            if (OnSessionSetEnabled != null)
            {
                OnSessionSetEnabled(false);
            }

            var apiCameraDirection = cameraDirection == DeviceCameraDirection.BackFacing ?
                                     ApiPrestoDeviceCameraDirection.BackFacing : ApiPrestoDeviceCameraDirection.FrontFacing;

            ExternApi.ArPresto_setDeviceCameraDirection(apiCameraDirection);
            m_CachedCameraDirection = cameraDirection;

            if (OnSessionSetEnabled != null)
            {
                OnSessionSetEnabled(true);
            }
        }
        private bool SetCameraDirection(DeviceCameraDirection cameraDirection)
        {
            // The camera direction has not changed.
            if (_cachedCameraDirection.HasValue &&
                _cachedCameraDirection.Value == cameraDirection)
            {
                return(false);
            }

            if (InstantPreviewManager.IsProvidingPlatform &&
                cameraDirection == DeviceCameraDirection.BackFacing)
            {
                return(false);
            }
            else if (InstantPreviewManager.IsProvidingPlatform)
            {
                InstantPreviewManager.LogLimitedSupportMessage(
                    "enable front-facing (selfie) camera");
                _cachedCameraDirection = DeviceCameraDirection.BackFacing;
                if (SessionComponent != null)
                {
                    SessionComponent.DeviceCameraDirection = DeviceCameraDirection.BackFacing;
                }

                return(false);
            }

            _cachedCameraDirection = cameraDirection;
            ApiPrestoStatus prestoStatus = ApiPrestoStatus.Uninitialized;

            ExternApi.ArPresto_getStatus(ref prestoStatus);
            if (prestoStatus == ApiPrestoStatus.ErrorInvalidCameraConfig)
            {
                // if the session is paused by invalid camera configuration,
                // attempt to recover by changing the camera direction:
                OnBeforeResumeSession(_cachedSessionHandle);
            }

            return(true);
        }
 public static extern void ArCameraConfig_getFacingDirection(
     IntPtr sessionHandle, IntPtr cameraConfigHandle,
     ref DeviceCameraDirection facingDirection);
 public static extern void ArCameraConfigFilter_setFacingDirection(
     IntPtr session, IntPtr filter, DeviceCameraDirection facing_direction_filter);