Merge remote-tracking branch 'origin/master' into tizen
authorTizenAPI-Bot <tizenapi@samsung.com>
Mon, 7 Jun 2021 15:41:11 +0000 (15:41 +0000)
committerTizenAPI-Bot <tizenapi@samsung.com>
Mon, 7 Jun 2021 15:41:11 +0000 (15:41 +0000)
src/Tizen.Multimedia.Camera/Camera/Camera.Events.cs
src/Tizen.Multimedia.Camera/Camera/Camera.cs
src/Tizen.Multimedia.Camera/Camera/CameraDeviceManager.cs

index 99824fe..5da1962 100644 (file)
@@ -272,6 +272,13 @@ namespace Tizen.Multimedia
             }
         }
 
+        /// <summary>
+        /// An event that occurs when there is a change in the camera device list.
+        /// </summary>
+        /// <since_tizen> 9 </since_tizen>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public event EventHandler<CameraDeviceListChangedEventArgs> CameraDeviceListChanged;
+
         private void RegisterCallbacks()
         {
             RegisterErrorCallback();
index f051baf..7c35345 100644 (file)
@@ -44,8 +44,8 @@ namespace Tizen.Multimedia
     {
         private IntPtr _handle = IntPtr.Zero;
         private bool _disposed = false;
-        private bool _initialized = false;
         private CameraState _state = CameraState.None;
+        private CameraDeviceManager _cameraDeviceManager;
 
         /// <summary>
         /// Initializes a new instance of the <see cref="Camera"/> class.
@@ -58,56 +58,48 @@ namespace Tizen.Multimedia
         /// <feature> http://tizen.org/feature/camera </feature>
         public Camera(CameraDevice device)
         {
-            Native.Create(device, out _handle).ThrowIfFailed("Failed to create camera instance");
+            ValidationUtil.ValidateEnum(typeof(CameraDevice), device, nameof(device));
+
+            Create(device);
+
+            Capabilities = new CameraCapabilities(this);
+            Settings = new CameraSettings(this);
+            DisplaySettings = new CameraDisplaySettings(this);
+
+            RegisterCallbacks();
 
-            Initialize();
+            SetState(CameraState.Created);
         }
 
-        /// <summary>
-        /// Initializes a new instance of the <see cref="Camera"/> class with <see cref="CameraDeviceType"/>.
-        /// </summary>
-        /// <param name="device">The camera device to access.</param>
-        /// <param name="type">Indicates whether this is network camera or not.</param>
-        /// <exception cref="ArgumentException">Invalid CameraDevice or CameraDeviceType.</exception>
-        /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
-        /// <exception cref="NotSupportedException">The camera feature is not supported.</exception>
-        /// <since_tizen> 9 </since_tizen>
-        /// <feature> http://tizen.org/feature/camera </feature>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public Camera(CameraDevice device, CameraDeviceType type)
+        private void Create(CameraDevice device)
         {
-            ValidationUtil.ValidateEnum(typeof(CameraDevice), device, nameof(device));
-            ValidationUtil.ValidateEnum(typeof(CameraDeviceType), type, nameof(type));
+            CameraDeviceType cameraDeviceType = CameraDeviceType.BuiltIn;
 
-            if (type == CameraDeviceType.BuiltIn)
+            try
             {
-                Native.Create(device, out _handle).ThrowIfFailed("Failed to create camera instance");
+                _cameraDeviceManager = new CameraDeviceManager();
+                cameraDeviceType = _cameraDeviceManager.GetDeviceInfo().First().Type;
+                Tizen.Log.Info(CameraLog.Tag, $"device type:{cameraDeviceType.ToString()}");
+
+                _cameraDeviceManager.CameraDeviceListChanged += CameraDeviceListChanged;
             }
-            else if (type == CameraDeviceType.Network)
+            catch (NotSupportedException e)
             {
-                Native.CreateNetworkCamera(device, out _handle).ThrowIfFailed("Failed to create network camera instance");
+                Tizen.Log.Info(CameraLog.Tag,
+                    $"CameraDeviceManager is not supported. {e.Message}");
             }
-            // USB camera doesn't support here.
-
-            Initialize();
-        }
 
-        private void Initialize()
-        {
-            if (_initialized)
+            if (cameraDeviceType == CameraDeviceType.BuiltIn ||
+                cameraDeviceType == CameraDeviceType.Usb)
             {
-                throw new InvalidOperationException("It has already been initialized.");
+                Native.Create(device, out _handle).
+                    ThrowIfFailed($"Failed to create {cameraDeviceType.ToString()} camera");
+            }
+            else
+            {
+                Native.CreateNetworkCamera(device, out _handle).
+                    ThrowIfFailed($"Failed to create {cameraDeviceType.ToString()} camera");
             }
-
-            Capabilities = new CameraCapabilities(this);
-            Settings = new CameraSettings(this);
-            DisplaySettings = new CameraDisplaySettings(this);
-
-            RegisterCallbacks();
-
-            SetState(CameraState.Created);
-
-            _initialized = true;
         }
 
         /// <summary>
@@ -144,6 +136,7 @@ namespace Tizen.Multimedia
                 if (disposing)
                 {
                     // to be used if there are any other disposable objects
+                    _cameraDeviceManager?.Dispose();
                 }
 
                 if (_handle != IntPtr.Zero)
index 7f9ea33..2ccad8d 100644 (file)
@@ -28,7 +28,7 @@ namespace Tizen.Multimedia
     /// <since_tizen> 9 </since_tizen>
     /// <feature> http://tizen.org/feature/camera </feature>
     [EditorBrowsable(EditorBrowsableState.Never)]
-    public class CameraDeviceManager : IDisposable
+    internal class CameraDeviceManager : IDisposable
     {
         private IntPtr _handle;
         private bool _disposed;
@@ -40,7 +40,7 @@ namespace Tizen.Multimedia
         /// <exception cref="NotSupportedException">The camera feature is not supported.</exception>
         /// <since_tizen> 9 </since_tizen>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public CameraDeviceManager()
+        internal CameraDeviceManager()
         {
             Native.Initialize(out _handle).ThrowIfFailed("Failed to initialize CameraDeviceManager");
 
@@ -62,7 +62,7 @@ namespace Tizen.Multimedia
         /// <returns></returns>
         /// <since_tizen> 9 </since_tizen>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public ReadOnlyCollection<CameraDeviceInfo> GetDeviceInfo()
+        internal ReadOnlyCollection<CameraDeviceInfo> GetDeviceInfo()
         {
             var deviceList = new Native.CameraDeviceListStruct();
 
@@ -103,11 +103,11 @@ namespace Tizen.Multimedia
         }
 
         /// <summary>
-        /// An event that occurs when there is a change in the camera device list.
+        /// An event that occurs when there is a change in the available camera device.
         /// </summary>
         /// <since_tizen> 9 </since_tizen>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public event EventHandler<CameraDeviceListChangedEventArgs> CameraDeviceListChanged;
+        internal event EventHandler<CameraDeviceListChangedEventArgs> CameraDeviceListChanged;
 
         private IntPtr Handle
         {
@@ -207,7 +207,7 @@ namespace Tizen.Multimedia
         /// <exception cref="ArgumentNullException">name of id is null.</exception>
         /// <since_tizen> 9 </since_tizen>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public CameraDeviceInfo(CameraDeviceType type, CameraDevice device, string name, string id)
+        internal CameraDeviceInfo(CameraDeviceType type, CameraDevice device, string name, string id)
         {
             ValidationUtil.ValidateEnum(typeof(CameraDeviceType), type, nameof(type));
             ValidationUtil.ValidateEnum(typeof(CameraDevice), device, nameof(device));
@@ -251,14 +251,5 @@ namespace Tizen.Multimedia
         /// <since_tizen> 9 </since_tizen>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public string Id { get; }
-
-        /// <summary>
-        /// Returns a string that represents the current object.
-        /// </summary>
-        /// <returns>A string that represents the current object.</returns>
-        /// <since_tizen> 9 </since_tizen>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public override string ToString() =>
-            $"Type:{Type.ToString()}, Device:{Device.ToString()}, Name:{Name}, ID:{Id}";
     }
 }