{
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.
/// <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>
if (disposing)
{
// to be used if there are any other disposable objects
+ _cameraDeviceManager?.Dispose();
}
if (_handle != IntPtr.Zero)
/// <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;
/// <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");
/// <returns></returns>
/// <since_tizen> 9 </since_tizen>
[EditorBrowsable(EditorBrowsableState.Never)]
- public ReadOnlyCollection<CameraDeviceInfo> GetDeviceInfo()
+ internal ReadOnlyCollection<CameraDeviceInfo> GetDeviceInfo()
{
var deviceList = new Native.CameraDeviceListStruct();
}
/// <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
{
/// <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));
/// <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}";
}
}