From 991e208435bbc3e6fb76087eae837efbb35a985e Mon Sep 17 00:00:00 2001 From: Haesu Gwon Date: Thu, 2 Sep 2021 22:41:26 +0900 Subject: [PATCH] [Camera] Add internal constructor (#3489) * [Camera] Add internal constructor and code clean --- src/Tizen.Multimedia.Camera/Camera/Camera.cs | 61 +++++++++++++++------- .../Camera/CameraDeviceManager.cs | 20 +++++++ src/Tizen.Multimedia.Camera/Camera/CameraEnums.cs | 8 ++- 3 files changed, 70 insertions(+), 19 deletions(-) diff --git a/src/Tizen.Multimedia.Camera/Camera/Camera.cs b/src/Tizen.Multimedia.Camera/Camera/Camera.cs index 9b14096..2f26aae 100644 --- a/src/Tizen.Multimedia.Camera/Camera/Camera.cs +++ b/src/Tizen.Multimedia.Camera/Camera/Camera.cs @@ -59,8 +59,26 @@ namespace Tizen.Multimedia { ValidationUtil.ValidateEnum(typeof(CameraDevice), device, nameof(device)); - Create(device); + CreateCameraDevice(device); + Initialize(); + } + + /// + /// Initializes a new instance of the class. + /// + /// CameraDevice and Type will be selected internally by CameraDeviceManager. + /// In case of any invalid operations. + /// The camera feature is not supported. + /// 9 + /// http://tizen.org/feature/camera + [EditorBrowsable(EditorBrowsableState.Never)] + public Camera() : this(CameraDevice.Default) + { + } + + private void Initialize() + { Capabilities = new CameraCapabilities(this); Settings = new CameraSettings(this); DisplaySettings = new CameraDisplaySettings(this); @@ -70,39 +88,46 @@ namespace Tizen.Multimedia SetState(CameraState.Created); } - private void Create(CameraDevice device) + private void CreateCameraDevice(CameraDevice device) { CameraDeviceType cameraDeviceType = CameraDeviceType.BuiltIn; + CameraDevice cameraDevice = device; - try + if (device == CameraDevice.Default || CameraDeviceManager.IsSupported) { - using (var cameraDeviceManager = new CameraDeviceManager()) + var deviceInfo = GetDeviceInformation(); + if (!deviceInfo.Any()) { - var deviceInfo = cameraDeviceManager.GetDeviceInformation(); - if (!deviceInfo.Any()) - { - throw new InvalidOperationException("There's no available camera device."); - } - - cameraDeviceType = deviceInfo.First().Type; + throw new InvalidOperationException("CDM is supported but, there's no available camera device."); } + + cameraDeviceType = deviceInfo.First().Type; + cameraDevice = deviceInfo.First().Device; + Log.Debug(CameraLog.Tag, $"Type:[{cameraDeviceType}], Device:[{cameraDevice}]"); } - catch (NotSupportedException e) + + CreateNativeCameraDevice(cameraDeviceType, cameraDevice); + } + + private IEnumerable GetDeviceInformation() + { + using (var cameraDeviceManager = new CameraDeviceManager()) { - Log.Info(CameraLog.Tag, - $"CameraDeviceManager is not supported. {e.Message}. Not error."); + return cameraDeviceManager.GetDeviceInformation(); } + } - if (cameraDeviceType == CameraDeviceType.BuiltIn || - cameraDeviceType == CameraDeviceType.Usb) + private void CreateNativeCameraDevice(CameraDeviceType type, CameraDevice device) + { + if (type == CameraDeviceType.BuiltIn || type == CameraDeviceType.Usb) { Native.Create(device, out _handle). - ThrowIfFailed($"Failed to create {cameraDeviceType.ToString()} camera"); + ThrowIfFailed($"Failed to create {type} camera"); } else { Native.CreateNetworkCamera(device, out _handle). - ThrowIfFailed($"Failed to create {cameraDeviceType.ToString()} camera"); + ThrowIfFailed($"Failed to create {type} camera"); } } diff --git a/src/Tizen.Multimedia.Camera/Camera/CameraDeviceManager.cs b/src/Tizen.Multimedia.Camera/Camera/CameraDeviceManager.cs index 995ef03..c087f51 100644 --- a/src/Tizen.Multimedia.Camera/Camera/CameraDeviceManager.cs +++ b/src/Tizen.Multimedia.Camera/Camera/CameraDeviceManager.cs @@ -83,6 +83,26 @@ namespace Tizen.Multimedia return GetDeviceInformation(deviceList); } + internal static bool IsSupported + { + get + { + try + { + using (var cameraDeviceManager = new CameraDeviceManager()) + { + return true; + } + } + catch (NotSupportedException) + { + Log.Info(CameraLog.Tag, + $"CameraDeviceManager is not supported. Not error."); + } + return false; + } + } + internal static IEnumerable GetDeviceInformation(Native.CameraDeviceListStruct list) { if (list.count == 0) diff --git a/src/Tizen.Multimedia.Camera/Camera/CameraEnums.cs b/src/Tizen.Multimedia.Camera/Camera/CameraEnums.cs index ca5a5b0..9c505bb 100644 --- a/src/Tizen.Multimedia.Camera/Camera/CameraEnums.cs +++ b/src/Tizen.Multimedia.Camera/Camera/CameraEnums.cs @@ -26,9 +26,15 @@ namespace Tizen.Multimedia public enum CameraDevice { /// + /// The CameraDevice will be decided internally by target policy. + /// + /// 9 + [EditorBrowsable(EditorBrowsableState.Never)] + Default = -1, + /// /// The rear camera device. /// - Rear, + Rear = 0, /// /// The front camera device. /// -- 2.7.4