-
Notifications
You must be signed in to change notification settings - Fork 493
Expand file tree
/
Copy pathCameraViewExtensions.windows.cs
More file actions
57 lines (49 loc) · 1.69 KB
/
CameraViewExtensions.windows.cs
File metadata and controls
57 lines (49 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using CommunityToolkit.Maui.Core;
using Windows.Devices.Enumeration;
using Windows.Media;
using Windows.Media.Capture;
namespace CommunityToolkit.Maui.Extensions;
static class CameraViewExtensions
{
public static async Task UpdateAvailability(this ICameraView cameraView, CancellationToken token)
{
var videoCaptureDevices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture).AsTask(token);
cameraView.IsAvailable = videoCaptureDevices.Count > 0;
}
public static async Task InitializeCameraForCameraView(this MediaCapture mediaCapture, string deviceId, CancellationToken token)
{
try
{
var settings = new MediaCaptureInitializationSettings
{
VideoDeviceId = deviceId,
PhotoCaptureSource = PhotoCaptureSource.Auto
};
PermissionStatus microphonePermissionStatus = PermissionStatus.Unknown;
var isMicrophoneCapable = Permissions.IsCapabilityDeclared("microphone");
if (isMicrophoneCapable)
{
microphonePermissionStatus = await Permissions.CheckStatusAsync<Permissions.Microphone>();
}
if (!isMicrophoneCapable || microphonePermissionStatus != PermissionStatus.Granted)
{
settings.StreamingCaptureMode = StreamingCaptureMode.Video;
settings.MediaCategory = MediaCategory.Media;
settings.AudioProcessing = AudioProcessing.Default;
}
var cameraPermissionStatus = await Permissions.CheckStatusAsync<Permissions.Camera>();
if (cameraPermissionStatus == PermissionStatus.Granted)
{
await mediaCapture.InitializeAsync(settings).AsTask(token);
}
else
{
throw new CameraException("Camera permission is not granted.");
}
}
catch (System.Runtime.InteropServices.COMException)
{
// Camera already initialized
}
}
}