Esempio n. 1
0
        /// <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;
        }
Esempio n. 2
0
        /// <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;
        }
Esempio n. 3
0
        /// <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;
        }
Esempio n. 7
0
        /// <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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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;
        }
Esempio n. 11
0
        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);
        }
Esempio n. 15
0
        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;
                            }
                        }
                    }
                }
            }
        }