[Camera] Add ctor for network camera (#3140)
authorHaesu Gwon <haesu.gwon@samsung.com>
Wed, 2 Jun 2021 06:45:58 +0000 (15:45 +0900)
committerGitHub <noreply@github.com>
Wed, 2 Jun 2021 06:45:58 +0000 (15:45 +0900)
* [Camera] Add ctor for network camera

src/Tizen.Multimedia.Camera/Camera/Camera.Properties.cs
src/Tizen.Multimedia.Camera/Camera/Camera.cs
src/Tizen.Multimedia.Camera/Interop/Interop.Camera.cs

index 1943a48..a3dc44b 100644 (file)
@@ -35,19 +35,19 @@ namespace Tizen.Multimedia
         /// Gets or sets the various camera settings.
         /// </summary>
         /// <since_tizen> 4 </since_tizen>
-        public CameraSettings Settings { get; }
+        public CameraSettings Settings { get; internal set; }
 
         /// <summary>
         /// Gets the various camera capabilities.
         /// </summary>
         /// <since_tizen> 4 </since_tizen>
-        public CameraCapabilities Capabilities { get; }
+        public CameraCapabilities Capabilities { get; internal set; }
 
         /// <summary>
         /// Get/set various camera display properties.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
-        public CameraDisplaySettings DisplaySettings { get; }
+        public CameraDisplaySettings DisplaySettings { get; internal set; }
 
         private Display _display;
 
index 2ce5e82..f051baf 100644 (file)
@@ -16,6 +16,7 @@
 
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Diagnostics;
 using System.Linq;
 using System.Runtime.InteropServices;
@@ -43,6 +44,7 @@ namespace Tizen.Multimedia
     {
         private IntPtr _handle = IntPtr.Zero;
         private bool _disposed = false;
+        private bool _initialized = false;
         private CameraState _state = CameraState.None;
 
         /// <summary>
@@ -50,6 +52,7 @@ namespace Tizen.Multimedia
         /// </summary>
         /// <param name="device">The camera device to access.</param>
         /// <exception cref="ArgumentException">Invalid CameraDevice type.</exception>
+        /// <exception cref="InvalidOperationException">In case of any invalid operations.</exception>
         /// <exception cref="NotSupportedException">The camera feature is not supported.</exception>
         /// <since_tizen> 3 </since_tizen>
         /// <feature> http://tizen.org/feature/camera </feature>
@@ -57,6 +60,45 @@ namespace Tizen.Multimedia
         {
             Native.Create(device, out _handle).ThrowIfFailed("Failed to create camera instance");
 
+            Initialize();
+        }
+
+        /// <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)
+        {
+            ValidationUtil.ValidateEnum(typeof(CameraDevice), device, nameof(device));
+            ValidationUtil.ValidateEnum(typeof(CameraDeviceType), type, nameof(type));
+
+            if (type == CameraDeviceType.BuiltIn)
+            {
+                Native.Create(device, out _handle).ThrowIfFailed("Failed to create camera instance");
+            }
+            else if (type == CameraDeviceType.Network)
+            {
+                Native.CreateNetworkCamera(device, out _handle).ThrowIfFailed("Failed to create network camera instance");
+            }
+            // USB camera doesn't support here.
+
+            Initialize();
+        }
+
+        private void Initialize()
+        {
+            if (_initialized)
+            {
+                throw new InvalidOperationException("It has already been initialized.");
+            }
+
             Capabilities = new CameraCapabilities(this);
             Settings = new CameraSettings(this);
             DisplaySettings = new CameraDisplaySettings(this);
@@ -64,6 +106,8 @@ namespace Tizen.Multimedia
             RegisterCallbacks();
 
             SetState(CameraState.Created);
+
+            _initialized = true;
         }
 
         /// <summary>
@@ -134,7 +178,6 @@ namespace Tizen.Multimedia
         }
         #endregion Dispose support
 
-        #region Check camera state
         internal void ValidateState(params CameraState[] required)
         {
             ValidateNotDisposed();
@@ -153,11 +196,7 @@ namespace Tizen.Multimedia
         {
             _state = state;
         }
-        #endregion Check camera state
-
-
 
-        #region Methods
         /// <summary>
         /// Changes the camera device.
         /// </summary>
@@ -450,6 +489,5 @@ namespace Tizen.Multimedia
 
             _faceDetectedCallback = null;
         }
-        #endregion Methods
     }
 }
index 91f76be..50b884e 100644 (file)
@@ -65,6 +65,9 @@ internal static partial class Interop
         [DllImport(Libraries.Camera, EntryPoint = "camera_create")]
         internal static extern CameraError Create(CameraDevice device, out IntPtr handle);
 
+        [DllImport(Libraries.Camera, EntryPoint ="camera_create_network")]
+        internal static extern CameraError CreateNetworkCamera(CameraDevice device, out IntPtr handle);
+
         [DllImport(Libraries.Camera, EntryPoint = "camera_change_device")]
         internal static extern CameraError ChangeDevice(IntPtr handle, CameraDevice device);