From: Tae-Young Chung Date: Mon, 20 Aug 2018 02:58:11 +0000 (+0900) Subject: [MediaVision] Fix an issue that callback was made on a garbage collected delegate... X-Git-Tag: 5.0.0.14562~106 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a78a6f0077acb04c0fe3ee37db218bb18d570606;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git [MediaVision] Fix an issue that callback was made on a garbage collected delegate (#373) Signed-off-by: Tae-Young Chung --- diff --git a/src/Tizen.Multimedia.Vision/MediaVision/MovementDetector.cs b/src/Tizen.Multimedia.Vision/MediaVision/MovementDetector.cs index cd80b00..e49e994 100755 --- a/src/Tizen.Multimedia.Vision/MediaVision/MovementDetector.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/MovementDetector.cs @@ -49,17 +49,12 @@ namespace Tizen.Multimedia.Vision /// 4 public event EventHandler 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 /// 4 public void AddSource(SurveillanceSource source, MovementDetectionConfiguration config) { + RegisterEvent(); InvokeAddSource(source, config); } diff --git a/src/Tizen.Multimedia.Vision/MediaVision/PersonAppearanceDetector.cs b/src/Tizen.Multimedia.Vision/MediaVision/PersonAppearanceDetector.cs index ad2e42a..d6c4de3 100755 --- a/src/Tizen.Multimedia.Vision/MediaVision/PersonAppearanceDetector.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/PersonAppearanceDetector.cs @@ -53,17 +53,12 @@ namespace Tizen.Multimedia.Vision /// 4 public event EventHandler 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 /// 4 public void AddSource(SurveillanceSource source, PersonAppearanceDetectionConfiguration config) { + RegisterEvent(); InvokeAddSource(source, config); } } diff --git a/src/Tizen.Multimedia.Vision/MediaVision/PersonRecognizer.cs b/src/Tizen.Multimedia.Vision/MediaVision/PersonRecognizer.cs index e64edbe..69c4e25 100755 --- a/src/Tizen.Multimedia.Vision/MediaVision/PersonRecognizer.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/PersonRecognizer.cs @@ -42,6 +42,7 @@ namespace Tizen.Multimedia.Vision /// 4 public PersonRecognizer() : base(PersonRecognizedEventType) { + } /// @@ -52,17 +53,12 @@ namespace Tizen.Multimedia.Vision /// 4 public event EventHandler 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); } } diff --git a/src/Tizen.Multimedia.Vision/MediaVision/SurveillanceEngine.cs b/src/Tizen.Multimedia.Vision/MediaVision/SurveillanceEngine.cs old mode 100644 new mode 100755 index cab419b..0d52836 --- a/src/Tizen.Multimedia.Vision/MediaVision/SurveillanceEngine.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/SurveillanceEngine.cs @@ -35,6 +35,7 @@ namespace Tizen.Multimedia.Vision private IntPtr _handle = IntPtr.Zero; private bool _disposed = false; + internal EventOccurredCallback _eventDetectedCallback; /// /// Initializes a new instance of the class. /// @@ -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"); } ///