[MediaVision] Fix an issue that callback was made on a garbage collected delegate...
authorTae-Young Chung <taeyoung1484@gmail.com>
Mon, 20 Aug 2018 02:58:11 +0000 (11:58 +0900)
committerGitHub <noreply@github.com>
Mon, 20 Aug 2018 02:58:11 +0000 (11:58 +0900)
Signed-off-by: Tae-Young Chung <ty83.chung@samsung.com>
src/Tizen.Multimedia.Vision/MediaVision/MovementDetector.cs
src/Tizen.Multimedia.Vision/MediaVision/PersonAppearanceDetector.cs
src/Tizen.Multimedia.Vision/MediaVision/PersonRecognizer.cs
src/Tizen.Multimedia.Vision/MediaVision/SurveillanceEngine.cs [changed mode: 0644->0755]

index cd80b00..e49e994 100755 (executable)
@@ -49,17 +49,12 @@ namespace Tizen.Multimedia.Vision
         /// <since_tizen> 4 </since_tizen>
         public event EventHandler<MovementDetectedEventArgs> Detected;
 
-        internal override void OnEventDetected(IntPtr trigger, IntPtr source, int streamId,
-            IntPtr result, IntPtr _)
+        private void RegisterEvent()
         {
-            try
+            _eventDetectedCallback = (IntPtr trigger, IntPtr source, int streamId, IntPtr result, IntPtr _) =>
             {
                 Detected?.Invoke(this, CreateMovementDetectedEventArgs(result));
-            }
-            catch (Exception e)
-            {
-                MultimediaLog.Error(MediaVisionLog.Tag, "Failed to invoke Recognized event.", e);
-            }
+            };
         }
 
         private static Rectangle[] RetrieveAreas(IntPtr result)
@@ -113,6 +108,7 @@ namespace Tizen.Multimedia.Vision
         /// <since_tizen> 4 </since_tizen>
         public void AddSource(SurveillanceSource source, MovementDetectionConfiguration config)
         {
+            RegisterEvent();
             InvokeAddSource(source, config);
         }
 
index ad2e42a..d6c4de3 100755 (executable)
@@ -53,17 +53,12 @@ namespace Tizen.Multimedia.Vision
         /// <since_tizen> 4 </since_tizen>
         public event EventHandler<PersonAppearanceDetectedEventArgs> Detected;
 
-        internal override void OnEventDetected(IntPtr trigger, IntPtr source, int streamId,
-            IntPtr result, IntPtr _)
+        private void RegisterEvent()
         {
-            try
+            _eventDetectedCallback = (IntPtr trigger, IntPtr source, int streamId, IntPtr result, IntPtr _) =>
             {
                 Detected?.Invoke(this, CreatePersonAppearanceChangedEventArgs(result));
-            }
-            catch (Exception e)
-            {
-                MultimediaLog.Error(MediaVisionLog.Tag, "Failed to invoke Recognized event.", e);
-            }
+            };
         }
 
 
@@ -118,6 +113,7 @@ namespace Tizen.Multimedia.Vision
         /// <since_tizen> 4 </since_tizen>
         public void AddSource(SurveillanceSource source, PersonAppearanceDetectionConfiguration config)
         {
+            RegisterEvent();
             InvokeAddSource(source, config);
         }
     }
index e64edbe..69c4e25 100755 (executable)
@@ -42,6 +42,7 @@ namespace Tizen.Multimedia.Vision
         /// <since_tizen> 4 </since_tizen>
         public PersonRecognizer() : base(PersonRecognizedEventType)
         {
+
         }
 
         /// <summary>
@@ -52,17 +53,12 @@ namespace Tizen.Multimedia.Vision
         /// <since_tizen> 4 </since_tizen>
         public event EventHandler<PersonRecognizedEventArgs> Recognized;
 
-        internal override void OnEventDetected(IntPtr trigger, IntPtr source, int streamId,
-            IntPtr result, IntPtr _)
+        private void RegisterEvent()
         {
-            try
+            _eventDetectedCallback = (IntPtr trigger, IntPtr source, int streamId, IntPtr result, IntPtr _) =>
             {
                 Recognized?.Invoke(this, CreatePersonRecognizedEventArgs(result));
-            }
-            catch (Exception e)
-            {
-                MultimediaLog.Error(MediaVisionLog.Tag, "Failed to invoke Recognized event.", e);
-            }
+            };
         }
 
         private PersonRecognizedEventArgs CreatePersonRecognizedEventArgs(IntPtr result)
@@ -124,6 +120,8 @@ namespace Tizen.Multimedia.Vision
             {
                 throw new ArgumentNullException(nameof(config));
             }
+
+            RegisterEvent();
             InvokeAddSource(source, config);
         }
     }
old mode 100644 (file)
new mode 100755 (executable)
index cab419b..0d52836
@@ -35,6 +35,7 @@ namespace Tizen.Multimedia.Vision
         private IntPtr _handle = IntPtr.Zero;
         private bool _disposed = false;
 
+        internal EventOccurredCallback _eventDetectedCallback;
         /// <summary>
         /// Initializes a new instance of the <see cref="SurveillanceEngine"/> class.
         /// </summary>
@@ -105,9 +106,6 @@ namespace Tizen.Multimedia.Vision
             }
         }
 
-        internal abstract void OnEventDetected(IntPtr trigger, IntPtr source,
-            int streamId, IntPtr eventResult, IntPtr userData);
-
         internal void InvokeAddSource(SurveillanceSource source, SurveillanceEngineConfiguration config)
         {
             if (source == null)
@@ -115,7 +113,7 @@ namespace Tizen.Multimedia.Vision
                 throw new ArgumentNullException(nameof(source));
             }
             SubscribeEventTrigger(Handle, source.StreamId, EngineConfiguration.GetHandle(config),
-                OnEventDetected).Validate("Failed to subscribe trigger");
+                _eventDetectedCallback).Validate("Failed to subscribe trigger");
         }
 
         /// <summary>