/// <summary> /// Initializes a new instance of the <see cref="BasicCamera"/> class. /// </summary> /// <param name="cameraType">Type of the camera device to use.</param> /// <param name="captureUse">The desired usage of the camera capture device.</param> protected BasicCamera(CameraType cameraType, CaptureUse captureUse) { this.CameraController = new CameraController(cameraType, captureUse); this.TaskEngine = new CameraTaskEngine(); this.CameraController.FocusChanged += this.CameraControllerOnFocusChanged; }
/// <summary> /// Initializes a new instance of the <see cref="BasicCamera"/> class. /// </summary> /// <param name="cameraType">Type of the camera device to use.</param> /// <param name="captureUse">The desired usage of the camera capture device.</param> protected BasicCamera(CameraType cameraType, CaptureUse captureUse) { this.CameraController = new CameraController(cameraType, captureUse); this.TaskEngine = new CameraTaskEngine(); this.CameraController.FocusChanged += this.CameraControllerOnFocusChanged; }
/// <summary> /// Initializes a new instance of the <see cref="CameraController"/> class. /// </summary> /// <param name="cameraType">Type of the camera device to use.</param> /// <param name="captureUse">The desired usage of the camera capture device.</param> /// <exception cref="ArgumentException"><paramref name="cameraType"/> is not supported.</exception> public CameraController(CameraType cameraType, CaptureUse captureUse) { this.CameraType = cameraType; this.CaptureUse = captureUse; this.ResetCaptureDevice(notifyProperties: false); }
/// <summary> /// Initializes a new instance of the <see cref="CameraController"/> class. /// </summary> /// <param name="cameraType">Type of the camera device to use.</param> /// <param name="captureUse">The desired usage of the camera capture device.</param> /// <exception cref="ArgumentException"><paramref name="cameraType"/> is not supported.</exception> public CameraController(CameraType cameraType, CaptureUse captureUse) { this.CameraType = cameraType; this.CaptureUse = captureUse; this.ResetCaptureDevice(notifyProperties: false); }
/// <summary> /// Initializes the <see cref="MediaCapture"/> element. /// </summary> /// <param name="primaryUse"> /// The primary use for the camera. /// </param> /// <param name="videoQuality"> /// The video quality (for recording only). /// </param> /// <returns> /// The <see cref="MediaCapture"/>. /// </returns> public async Task <MediaCapture> Initialize( CaptureUse primaryUse, VideoEncodingQuality videoQuality) { if (this._mediaCapture != null) { this.Dispose(); } this.IsCameraAvailable = true; var camera = await this.GetCamera(this.ActiveCamera); this._mediaCapture = new MediaCapture(); this._mediaCapture.Failed += this.OnMediaCaptureFailed; await this._mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = camera.Id }); this._mediaCapture.VideoDeviceController.PrimaryUse = primaryUse; this._imageEncodingProperties = ImageEncodingProperties.CreateJpeg(); this._videoEncodingProfile = MediaEncodingProfile.CreateMp4(videoQuality); this.SetEncodingProperties(primaryUse); var rotation = this.GetVideoRotation(DisplayInformation.GetForCurrentView().CurrentOrientation); if (primaryUse == CaptureUse.Photo) { await this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync( MediaStreamType.Photo, this._mediaEncodingProperties); this.IsFlashAvailable = this.Settings.FlashControl.Supported; } else if (primaryUse == CaptureUse.Video) { await this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync( MediaStreamType.VideoPreview, this._mediaEncodingProperties); await this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync( MediaStreamType.VideoRecord, this._mediaEncodingProperties); this.SetRecordOrientation(rotation); this.IsFlashAvailable = this.Settings.TorchControl.Supported; } this._mediaCapture.SetPreviewRotation(rotation); return(this._mediaCapture); }
public async Task<MediaCapture> Initialize(CaptureUse primaryUse = CaptureUse.Photo) { // Create MediaCapture and init mediaCapture = new MediaCapture(); await mediaCapture.InitializeAsync(); mediaCapture.VideoDeviceController.PrimaryUse = primaryUse; // Create photo encoding properties as JPEG and set the size that should be used for photo capturing imgEncodingProperties = ImageEncodingProperties.CreateJpeg(); imgEncodingProperties.Width = 640; imgEncodingProperties.Height = 480; // Create video encoding profile as MP4 videoEncodingProperties = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Auto); // Lots of properties for audio and video could be set here... return mediaCapture; }
/// <summary> /// Initializes the camera capture. /// </summary> /// <param name="captureUse"> /// The capture use. /// </param> /// <returns> /// The <see cref="Task"/>. /// </returns> public async Task <MediaCapture> Initialize(CaptureUse captureUse) { if (this._mediaCapture != null) { this.Dispose(); } var camera = await GetDeviceInfo(Panel.Back); this._mediaCapture = new MediaCapture(); this._mediaCapture.Failed += this.OnCaptureFailed; await this._mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = camera.Id }); this._mediaCapture.VideoDeviceController.PrimaryUse = captureUse; this._imgEncodingProperties = ImageEncodingProperties.CreateJpeg(); this._videoEncodingProperties = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Auto); if (captureUse == CaptureUse.Photo) { // get all possible resolutions for the current controller var resolutions = this._mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.Photo) .ToList(); var max = 0; foreach ( var res in resolutions.OfType <VideoEncodingProperties>().Where(res => res.Width * res.Height > max)) { // find the maximum resolution possible max = (int)(res.Width * res.Height); this._mediaEncodingProperties = res; this._imgEncodingProperties.Width = res.Width; this._imgEncodingProperties.Height = res.Height; } await this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync( MediaStreamType.Photo, this._mediaEncodingProperties); } return(this._mediaCapture); }
/// <summary> /// Swaps between the current active camera and the secondary. /// </summary> /// <param name="primaryUse"> /// The primary use for the camera. /// </param> /// <param name="videoQuality"> /// The video quality (for recording only). /// </param> /// <returns> /// The <see cref="MediaCapture"/>. /// </returns> public async Task <MediaCapture> ChangeCamera( CaptureUse primaryUse, VideoEncodingQuality videoQuality) { switch (this.ActiveCamera) { case Panel.Front: this.ActiveCamera = Panel.Back; return(await this.Initialize(primaryUse, videoQuality)); case Panel.Back: this.ActiveCamera = Panel.Front; return(await this.Initialize(primaryUse, videoQuality)); } return(null); }
public async Task <MediaCapture> Initialize(CaptureUse primaryUse = CaptureUse.Photo) { // Create MediaCapture and init mediaCapture = new MediaCapture(); await mediaCapture.InitializeAsync(); mediaCapture.VideoDeviceController.PrimaryUse = primaryUse; // Create photo encoding properties as JPEG and set the size that should be used for photo capturing imgEncodingProperties = ImageEncodingProperties.CreateJpeg(); imgEncodingProperties.Width = 640; imgEncodingProperties.Height = 480; // Create video encoding profile as MP4 videoEncodingProperties = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Vga); // Lots of properties for audio and video could be set here... return(mediaCapture); }
public async Task<MediaCapture> Initialize(CaptureUse primaryUse = CaptureUse.Photo) { var devices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture); mediaCapture = new MediaCapture(); if (devices.Count() > 0) { await this.mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = devices.ElementAt(1).Id, PhotoCaptureSource = Windows.Media.Capture.PhotoCaptureSource.VideoPreview }); } mediaCapture.VideoDeviceController.PrimaryUse = primaryUse; mediaCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees); imgEncodingProperties = ImageEncodingProperties.CreateJpeg(); imgEncodingProperties.Width = 640; imgEncodingProperties.Height = 480; videoEncodingProperties = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Auto); return mediaCapture; }
public async Task <MediaCapture> Initialize(CaptureUse primaryUse = CaptureUse.Photo) { var devices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture); mediaCapture = new MediaCapture(); if (devices.Count() > 0) { await this.mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = devices.ElementAt(1).Id, PhotoCaptureSource = Windows.Media.Capture.PhotoCaptureSource.VideoPreview }); } mediaCapture.VideoDeviceController.PrimaryUse = primaryUse; mediaCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees); imgEncodingProperties = ImageEncodingProperties.CreateJpeg(); imgEncodingProperties.Width = 640; imgEncodingProperties.Height = 480; videoEncodingProperties = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Auto); return(mediaCapture); }
/// <summary> /// Swaps between the current active camera and the secondary. /// </summary> /// <param name="primaryUse"> /// The primary use for the camera. /// </param> /// <param name="videoQuality"> /// The video quality (for recording only). /// </param> /// <returns> /// The <see cref="MediaCapture"/>. /// </returns> public async Task<MediaCapture> ChangeCamera( CaptureUse primaryUse, VideoEncodingQuality videoQuality) { switch (this.ActiveCamera) { case Panel.Front: this.ActiveCamera = Panel.Back; return await this.Initialize(primaryUse, videoQuality); case Panel.Back: this.ActiveCamera = Panel.Front; return await this.Initialize(primaryUse, videoQuality); } return null; }
private void SetEncodingProperties(CaptureUse captureUse) { if (this._videoEncodingProfile.Video != null) { if (captureUse == CaptureUse.Photo) { var allProps = this._mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties( MediaStreamType.Photo); var photoProps = GetMediaProperties(allProps, CaptureUse.Photo) as ImageEncodingProperties; if (photoProps == null) { var videoProps = GetMediaProperties(allProps, CaptureUse.Video) as VideoEncodingProperties; if (videoProps != null) { this._imageEncodingProperties.Height = videoProps.Height; this._imageEncodingProperties.Width = videoProps.Width; this._mediaEncodingProperties = videoProps; } else { VideoEncodingProperties maxProps = null; var max = 0; foreach (var res in from res in allProps.OfType <VideoEncodingProperties>() where res.Width * res.Height > max select res) { max = (int)(res.Width * res.Height); maxProps = res; } if (maxProps != null) { this._imageEncodingProperties.Height = maxProps.Height; this._imageEncodingProperties.Width = maxProps.Width; this._mediaEncodingProperties = maxProps; } } } else { this._imageEncodingProperties = photoProps; this._mediaEncodingProperties = this._imageEncodingProperties; } } else { var mediaStreamProps = this._mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties( MediaStreamType.VideoPreview).ToList(); var videoProps = mediaStreamProps.OfType <VideoEncodingProperties>() .FirstOrDefault( x => x != null && this._supportedVideoFormats.Contains(x.Subtype.ToLower()) && x.Width == this._videoEncodingProfile.Video.Width && x.Height == this._videoEncodingProfile.Video.Height); if (videoProps != null) { this._mediaEncodingProperties = videoProps; } else { var allVideoProps = mediaStreamProps.OfType <VideoEncodingProperties>() .Where( x => x != null && this._supportedVideoFormats.Contains(x.Subtype.ToLower()) && x.Width <= this._videoEncodingProfile.Video.Width && x.Height <= this._videoEncodingProfile.Video.Height); VideoEncodingProperties maxVideoPropsRatio = null; var max = 0; foreach (var res in from res in allVideoProps where res.Width *res.Height > max let ratio = (double)res.Width / res.Height where ratio > 1.34 select res) { max = (int)(res.Width * res.Height); maxVideoPropsRatio = res; } if (maxVideoPropsRatio != null) { this._mediaEncodingProperties = maxVideoPropsRatio; } else { VideoEncodingProperties maxVideoProps = null; max = 0; foreach (var res in from res in allVideoProps where res.Width *res.Height > max select res) { max = (int)(res.Width * res.Height); maxVideoProps = res; } if (maxVideoProps != null) { this._mediaEncodingProperties = maxVideoProps; } } } } } }
private static IMediaEncodingProperties GetMediaProperties(IEnumerable <IMediaEncodingProperties> allProps, CaptureUse captureUse) { var max = 0; if (captureUse == CaptureUse.Photo) { ImageEncodingProperties photoProps = null; foreach (var res in from res in allProps.OfType <ImageEncodingProperties>() where res.Width * res.Height > max let ratio = (double)res.Width / res.Height where ratio > 1.34 select res) { max = (int)(res.Width * res.Height); photoProps = res; } return(photoProps); } VideoEncodingProperties videoProps = null; foreach (var res in from res in allProps.OfType <VideoEncodingProperties>() where res.Width * res.Height > max let ratio = (double)res.Width / res.Height where ratio > 1.34 select res) { max = (int)(res.Width * res.Height); videoProps = res; } return(videoProps); }
async void createCamera() { CaptureUse primaryUse = CaptureUse.Video; mediaCapture = new MediaCapture(); DeviceInformationCollection webcamList = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture); DeviceInformation backWebcam = (from webcam in webcamList where webcam.EnclosureLocation != null && webcam.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back select webcam).FirstOrDefault(); await mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = backWebcam.Id, AudioDeviceId = "", StreamingCaptureMode = StreamingCaptureMode.Video, PhotoCaptureSource = PhotoCaptureSource.VideoPreview }); mediaCapture.VideoDeviceController.PrimaryUse = primaryUse; mediaCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees); mediaCapture.VideoDeviceController.FlashControl.Enabled = false; setEffects(); reader = new BarcodeReader { Options = new DecodingOptions { PossibleFormats = new BarcodeFormat[] { BarcodeFormat.QR_CODE }, TryHarder = true } }; captureElement.Source = mediaCapture; await mediaCapture.StartPreviewAsync(); focusControl = mediaCapture.VideoDeviceController.FocusControl; if (focusControl.Supported == true) { FocusSettings focusSetting = new FocusSettings() { AutoFocusRange = AutoFocusRange.FullRange, Mode = FocusMode.Auto, WaitForFocus = false, DisableDriverFallback = false }; focusControl.Configure(focusSetting); await mediaCapture.VideoDeviceController.ExposureControl.SetAutoAsync(true); //await focusControl.FocusAsync(); } // zoom if (this.mediaCapture.VideoDeviceController.ZoomControl.Supported) { sliderZoom.Minimum = this.mediaCapture.VideoDeviceController.ZoomControl.Min; sliderZoom.Maximum = this.mediaCapture.VideoDeviceController.ZoomControl.Max; sliderZoom.StepFrequency = this.mediaCapture.VideoDeviceController.ZoomControl.Step; } }
/// <summary> /// Initializes the <see cref="MediaCapture"/> element. /// </summary> /// <param name="primaryUse"> /// The primary use for the camera. /// </param> /// <param name="videoQuality"> /// The video quality (for recording only). /// </param> /// <returns> /// The <see cref="MediaCapture"/>. /// </returns> public async Task<MediaCapture> Initialize( CaptureUse primaryUse, VideoEncodingQuality videoQuality) { if (this._mediaCapture != null) { this.Dispose(); } this.IsCameraAvailable = true; var camera = await this.GetCamera(this.ActiveCamera); this._mediaCapture = new MediaCapture(); this._mediaCapture.Failed += this.OnMediaCaptureFailed; await this._mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = camera.Id }); this._mediaCapture.VideoDeviceController.PrimaryUse = primaryUse; this._imageEncodingProperties = ImageEncodingProperties.CreateJpeg(); this._videoEncodingProfile = MediaEncodingProfile.CreateMp4(videoQuality); this.SetEncodingProperties(primaryUse); var rotation = this.GetVideoRotation(DisplayInformation.GetForCurrentView().CurrentOrientation); if (primaryUse == CaptureUse.Photo) { await this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync( MediaStreamType.Photo, this._mediaEncodingProperties); this.IsFlashAvailable = this.Settings.FlashControl.Supported; } else if (primaryUse == CaptureUse.Video) { await this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync( MediaStreamType.VideoPreview, this._mediaEncodingProperties); await this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync( MediaStreamType.VideoRecord, this._mediaEncodingProperties); this.SetRecordOrientation(rotation); this.IsFlashAvailable = this.Settings.TorchControl.Supported; } this._mediaCapture.SetPreviewRotation(rotation); return this._mediaCapture; }
private static IMediaEncodingProperties GetMediaProperties(IEnumerable<IMediaEncodingProperties> allProps, CaptureUse captureUse) { var max = 0; if (captureUse == CaptureUse.Photo) { ImageEncodingProperties photoProps = null; foreach (var res in from res in allProps.OfType<ImageEncodingProperties>() where res.Width * res.Height > max let ratio = (double)res.Width / res.Height where ratio > 1.34 select res) { max = (int)(res.Width * res.Height); photoProps = res; } return photoProps; } VideoEncodingProperties videoProps = null; foreach (var res in from res in allProps.OfType<VideoEncodingProperties>() where res.Width * res.Height > max let ratio = (double)res.Width / res.Height where ratio > 1.34 select res) { max = (int)(res.Width * res.Height); videoProps = res; } return videoProps; }
private void SetEncodingProperties(CaptureUse captureUse) { if (this._videoEncodingProfile.Video != null) { if (captureUse == CaptureUse.Photo) { var allProps = this._mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties( MediaStreamType.Photo); var photoProps = GetMediaProperties(allProps, CaptureUse.Photo) as ImageEncodingProperties; if (photoProps == null) { var videoProps = GetMediaProperties(allProps, CaptureUse.Video) as VideoEncodingProperties; if (videoProps != null) { this._imageEncodingProperties.Height = videoProps.Height; this._imageEncodingProperties.Width = videoProps.Width; this._mediaEncodingProperties = videoProps; } else { VideoEncodingProperties maxProps = null; var max = 0; foreach (var res in from res in allProps.OfType<VideoEncodingProperties>() where res.Width * res.Height > max select res) { max = (int)(res.Width * res.Height); maxProps = res; } if (maxProps != null) { this._imageEncodingProperties.Height = maxProps.Height; this._imageEncodingProperties.Width = maxProps.Width; this._mediaEncodingProperties = maxProps; } } } else { this._imageEncodingProperties = photoProps; this._mediaEncodingProperties = this._imageEncodingProperties; } } else { var mediaStreamProps = this._mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties( MediaStreamType.VideoPreview).ToList(); var videoProps = mediaStreamProps.OfType<VideoEncodingProperties>() .FirstOrDefault( x => x != null && this._supportedVideoFormats.Contains(x.Subtype.ToLower()) && x.Width == this._videoEncodingProfile.Video.Width && x.Height == this._videoEncodingProfile.Video.Height); if (videoProps != null) { this._mediaEncodingProperties = videoProps; } else { var allVideoProps = mediaStreamProps.OfType<VideoEncodingProperties>() .Where( x => x != null && this._supportedVideoFormats.Contains(x.Subtype.ToLower()) && x.Width <= this._videoEncodingProfile.Video.Width && x.Height <= this._videoEncodingProfile.Video.Height); VideoEncodingProperties maxVideoPropsRatio = null; var max = 0; foreach (var res in from res in allVideoProps where res.Width * res.Height > max let ratio = (double)res.Width / res.Height where ratio > 1.34 select res) { max = (int)(res.Width * res.Height); maxVideoPropsRatio = res; } if (maxVideoPropsRatio != null) { this._mediaEncodingProperties = maxVideoPropsRatio; } else { VideoEncodingProperties maxVideoProps = null; max = 0; foreach (var res in from res in allVideoProps where res.Width * res.Height > max select res) { max = (int)(res.Width * res.Height); maxVideoProps = res; } if (maxVideoProps != null) { this._mediaEncodingProperties = maxVideoProps; } } } } } }