From cc89dd184dc4de236e99889a209bfaf97578e1dd Mon Sep 17 00:00:00 2001 From: Haesu Gwon Date: Fri, 2 Jul 2021 11:27:18 +0900 Subject: [PATCH] [Camera] Change the way to invoke CDM event (#3248) * [Camera] Change the way to invoke CDM event --- .../Camera/CameraDeviceManager.cs | 39 ++++++++++++++++++---- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/src/Tizen.Multimedia.Camera/Camera/CameraDeviceManager.cs b/src/Tizen.Multimedia.Camera/Camera/CameraDeviceManager.cs index 1bc5ef7..0291272 100644 --- a/src/Tizen.Multimedia.Camera/Camera/CameraDeviceManager.cs +++ b/src/Tizen.Multimedia.Camera/Camera/CameraDeviceManager.cs @@ -36,6 +36,7 @@ namespace Tizen.Multimedia { private IntPtr _handle; private bool _disposed; + private Native.DeviceConnectionChangedCallback _deviceConnectionChangedCallback; /// /// Initializes a new instance of the class. @@ -47,8 +48,6 @@ namespace Tizen.Multimedia public CameraDeviceManager() { Native.Initialize(out _handle).ThrowIfFailed("Failed to initialize CameraDeviceManager"); - - RegisterDeviceConnectionChangedCallback(); } /// @@ -115,12 +114,33 @@ namespace Tizen.Multimedia return new String(word, 0, length); } + private event EventHandler _deviceConnectionChanged; /// /// An event that occurs when camera device is connected or disconnected. /// /// 9 [EditorBrowsable(EditorBrowsableState.Never)] - public event EventHandler DeviceConnectionChanged; + public event EventHandler DeviceConnectionChanged + { + add + { + if (_deviceConnectionChanged == null) + { + RegisterDeviceConnectionChangedCallback(); + } + + _deviceConnectionChanged += value; + } + remove + { + _deviceConnectionChanged -= value; + + if (_deviceConnectionChanged == null) + { + UnregisterDeviceConnectionChangedCallback(); + } + } + } private IntPtr Handle { @@ -134,17 +154,22 @@ namespace Tizen.Multimedia private int connectionCallbackId = 0; private void RegisterDeviceConnectionChangedCallback() { - Native.DeviceConnectionChangedCallback callback = (ref Native.CameraDeviceStruct device, bool status, IntPtr userData) => + Log.Debug(CameraLog.Tag, "Enter"); + + _deviceConnectionChangedCallback = (ref Native.CameraDeviceStruct device, bool status, IntPtr userData) => { - DeviceConnectionChanged?.Invoke(this, new CameraDeviceConnectionChangedEventArgs(ref device, status)); + Log.Debug(CameraLog.Tag, "Invoke DeviceConnectionChanged event"); + _deviceConnectionChanged?.Invoke(this, new CameraDeviceConnectionChangedEventArgs(ref device, status)); }; - Native.SetDeviceConnectionChangedCallback(Handle, callback, IntPtr.Zero, out connectionCallbackId). + Native.SetDeviceConnectionChangedCallback(Handle, _deviceConnectionChangedCallback, IntPtr.Zero, out connectionCallbackId). ThrowIfFailed("Failed to set device connection changed callback"); } private void UnregisterDeviceConnectionChangedCallback() { + Log.Debug(CameraLog.Tag, "Enter"); + Native.UnsetDeviceConnectionChangedCallback(Handle, connectionCallbackId). ThrowIfFailed("Failed to unset device connection changed callback"); } @@ -160,6 +185,8 @@ namespace Tizen.Multimedia { if (!_disposed) { + Log.Debug(CameraLog.Tag, $"Enter. disposing:{disposing.ToString()}"); + if (disposing) { // to be used if there are any other disposable objects -- 2.7.4