From 6d2a3bd7ca1c765d7b18bec01033a6d2c900e018 Mon Sep 17 00:00:00 2001 From: Tae-Young Chung Date: Mon, 17 Apr 2017 14:17:46 +0900 Subject: [PATCH] [MediaVision] Added supported feature check routine and fixed bugs 1. Added supported feature check routine to each configuration class 2. Fixed wrong exception throwing 3. Fixed wrong described exception and errata 4. Fixed double dispose() when MediaVisionSource() throws exception Change-Id: Ia69b9ed1678f930297bcf19bcdc39d2158ddc086 Signed-off-by: Tae-Young Chung --- packaging/csapi-multimedia.spec | 2 +- .../MediaVision/BarcodeDetectionConfiguration.cs | 2 +- .../MediaVision/BarcodeGenerationConfiguration.cs | 2 +- .../MediaVision/EngineConfiguration.cs | 37 +++++++++++++++++++++- .../MediaVision/FaceDetectionConfiguration.cs | 2 +- .../MediaVision/FaceRecognitionConfiguration.cs | 2 +- .../MediaVision/FaceRecognitionModel.cs | 4 +-- .../MediaVision/FaceTrackingModel.cs | 4 +-- .../MediaVision/ImageFillConfiguration.cs | 2 +- src/Tizen.Multimedia/MediaVision/ImageObject.cs | 19 ++--------- .../MediaVision/ImageRecognitionConfiguration.cs | 2 +- src/Tizen.Multimedia/MediaVision/ImageTracker.cs | 4 +-- .../MediaVision/ImageTrackingModel.cs | 2 +- .../MediaVision/MediaVisionError.cs | 2 +- .../MediaVision/MediaVisionSource.cs | 2 +- .../MediaVision/PersonRecognizer.cs | 2 +- .../MediaVision/SurveillanceConfiguration.cs | 2 +- .../MediaVision/SurveillanceEngine.cs | 3 -- src/Tizen.Multimedia/Tizen.Multimedia.project.json | 3 +- 19 files changed, 59 insertions(+), 39 deletions(-) diff --git a/packaging/csapi-multimedia.spec b/packaging/csapi-multimedia.spec index 5325faa..485f729 100755 --- a/packaging/csapi-multimedia.spec +++ b/packaging/csapi-multimedia.spec @@ -1,6 +1,6 @@ Name: csapi-multimedia Summary: Tizen Multimedia API for C# -Version: 1.0.52 +Version: 1.0.53 Release: 0 Group: Development/Libraries License: Apache-2.0 diff --git a/src/Tizen.Multimedia/MediaVision/BarcodeDetectionConfiguration.cs b/src/Tizen.Multimedia/MediaVision/BarcodeDetectionConfiguration.cs index a02bcc5..832d094 100644 --- a/src/Tizen.Multimedia/MediaVision/BarcodeDetectionConfiguration.cs +++ b/src/Tizen.Multimedia/MediaVision/BarcodeDetectionConfiguration.cs @@ -28,7 +28,7 @@ namespace Tizen.Multimedia /// Initializes a new instance of the class. /// /// The feature is not supported. - public BarcodeDetectionConfiguration() + public BarcodeDetectionConfiguration() : base("barcode_detection") { } diff --git a/src/Tizen.Multimedia/MediaVision/BarcodeGenerationConfiguration.cs b/src/Tizen.Multimedia/MediaVision/BarcodeGenerationConfiguration.cs index 88d2cfe..6ccbbb4 100644 --- a/src/Tizen.Multimedia/MediaVision/BarcodeGenerationConfiguration.cs +++ b/src/Tizen.Multimedia/MediaVision/BarcodeGenerationConfiguration.cs @@ -32,7 +32,7 @@ namespace Tizen.Multimedia /// Initializes a new instance of the class. /// /// The feature is not supported. - public BarcodeGenerationConfiguration() + public BarcodeGenerationConfiguration() : base("barcode_generation") { } diff --git a/src/Tizen.Multimedia/MediaVision/EngineConfiguration.cs b/src/Tizen.Multimedia/MediaVision/EngineConfiguration.cs index 604f2ba..ef126b1 100644 --- a/src/Tizen.Multimedia/MediaVision/EngineConfiguration.cs +++ b/src/Tizen.Multimedia/MediaVision/EngineConfiguration.cs @@ -15,6 +15,7 @@ */ using System; +using Tizen.System; using System.Runtime.InteropServices; using static Tizen.Multimedia.Interop.MediaVision; @@ -28,8 +29,42 @@ namespace Tizen.Multimedia private IntPtr _handle = IntPtr.Zero; private bool _disposed = false; - internal EngineConfiguration() + private const string _featurePath = "http://tizen.org/feature/vision."; + + private bool IsSupportedEngineType(string type) { + bool isSupported = false; + + string featureType = _featurePath + type; + + bool ret = SystemInfo.TryGetValue(featureType, out isSupported); + + return (isSupported && ret) ? true : false; + } + + private bool IsSupportedEngineType(string type1, string type2) + { + return (IsSupportedEngineType(type1) && IsSupportedEngineType(type2)) ? true : false; + } + + internal EngineConfiguration(string engineType) + { + if (IsSupportedEngineType(engineType) == false) + { + throw new NotSupportedException($"{engineType} : Not Supported"); + } + + EngineConfig.Create(out _handle).Validate("Failed to create media vision engine."); + } + + internal EngineConfiguration(string engineType1, string engineType2) + { + + if (IsSupportedEngineType(engineType1, engineType2) == false) + { + throw new NotSupportedException($"{engineType1} or {engineType2} : Not Supported"); + } + EngineConfig.Create(out _handle).Validate("Failed to create media vision engine."); } diff --git a/src/Tizen.Multimedia/MediaVision/FaceDetectionConfiguration.cs b/src/Tizen.Multimedia/MediaVision/FaceDetectionConfiguration.cs index 510219d..fedb11a 100644 --- a/src/Tizen.Multimedia/MediaVision/FaceDetectionConfiguration.cs +++ b/src/Tizen.Multimedia/MediaVision/FaceDetectionConfiguration.cs @@ -35,7 +35,7 @@ namespace Tizen.Multimedia /// Initializes a new instance of the class. /// /// The feature is not supported. - public FaceDetectionConfiguration() + public FaceDetectionConfiguration() : base("face_recognition") { } diff --git a/src/Tizen.Multimedia/MediaVision/FaceRecognitionConfiguration.cs b/src/Tizen.Multimedia/MediaVision/FaceRecognitionConfiguration.cs index 56b2049..581e6b2 100644 --- a/src/Tizen.Multimedia/MediaVision/FaceRecognitionConfiguration.cs +++ b/src/Tizen.Multimedia/MediaVision/FaceRecognitionConfiguration.cs @@ -27,7 +27,7 @@ namespace Tizen.Multimedia /// Initializes a new instance of the class. /// /// The feature is not supported. - public FaceRecognitionConfiguration() + public FaceRecognitionConfiguration() : base("face_recognition") { } diff --git a/src/Tizen.Multimedia/MediaVision/FaceRecognitionModel.cs b/src/Tizen.Multimedia/MediaVision/FaceRecognitionModel.cs index bccb800..7b8b9e9 100644 --- a/src/Tizen.Multimedia/MediaVision/FaceRecognitionModel.cs +++ b/src/Tizen.Multimedia/MediaVision/FaceRecognitionModel.cs @@ -155,7 +155,7 @@ namespace Tizen.Multimedia { if (source == null) { - throw new ArgumentException("Invalid source"); + throw new ArgumentNullException(nameof(source)); } InvokeAdd(source, label, null).Validate("Failed to add face example image"); @@ -180,7 +180,7 @@ namespace Tizen.Multimedia { if (source == null) { - throw new ArgumentException("Invalid source"); + throw new ArgumentNullException(nameof(source)); } InvokeAdd(source, label, area).Validate("Failed to add face example image"); diff --git a/src/Tizen.Multimedia/MediaVision/FaceTrackingModel.cs b/src/Tizen.Multimedia/MediaVision/FaceTrackingModel.cs index bddeac3..2d26630 100644 --- a/src/Tizen.Multimedia/MediaVision/FaceTrackingModel.cs +++ b/src/Tizen.Multimedia/MediaVision/FaceTrackingModel.cs @@ -45,7 +45,7 @@ namespace Tizen.Multimedia /// /// Path to the model to load. /// is null. - /// is invalid. + /// is invalid. /// /// The feature is not supported.\n /// - or -\n @@ -88,6 +88,7 @@ namespace Tizen.Multimedia /// /// /// needs to be the position of the face to be tracked when called first time for the tracking model. + /// is fitted to the valid region of if has invalid points. /// /// The source where face location is specified. /// Usually it is the first frame of the video or the first image in the continuous @@ -95,7 +96,6 @@ namespace Tizen.Multimedia /// The region determining position of the face to be tracked on the source. /// If null, then tracking model will try to find previously tracked face by itself. /// is null. - /// has invalid points. /// /// The has already been disposed of.\n /// - or -\n diff --git a/src/Tizen.Multimedia/MediaVision/ImageFillConfiguration.cs b/src/Tizen.Multimedia/MediaVision/ImageFillConfiguration.cs index 27d1c86..d83a280 100644 --- a/src/Tizen.Multimedia/MediaVision/ImageFillConfiguration.cs +++ b/src/Tizen.Multimedia/MediaVision/ImageFillConfiguration.cs @@ -38,7 +38,7 @@ namespace Tizen.Multimedia /// Initializes a new instance of the class. /// /// The feature is not supported. - public ImageFillConfiguration() + public ImageFillConfiguration() : base("image_recognition") { } diff --git a/src/Tizen.Multimedia/MediaVision/ImageObject.cs b/src/Tizen.Multimedia/MediaVision/ImageObject.cs index 9974f42..d186639 100644 --- a/src/Tizen.Multimedia/MediaVision/ImageObject.cs +++ b/src/Tizen.Multimedia/MediaVision/ImageObject.cs @@ -153,7 +153,7 @@ namespace Tizen.Multimedia /// has already been disposed of.\n /// - or -\n /// has already been disposed of. - /// public void Fill(MediaVisionSource source, ImageFillConfiguration config) { InvokeFill(source, config, null); @@ -170,7 +170,7 @@ namespace Tizen.Multimedia /// The has already been disposed of.\n /// - or -\n /// has already been disposed of.\n - /// public void Fill(MediaVisionSource source, Rectangle rect) { InvokeFill(source, null, rect); @@ -190,7 +190,7 @@ namespace Tizen.Multimedia /// has already been disposed of.\n /// - or -\n /// has already been disposed of. - /// public void Fill(MediaVisionSource source, ImageFillConfiguration config, Rectangle rect) { InvokeFill(source, config, rect); @@ -208,19 +208,6 @@ namespace Tizen.Multimedia return InteropImage.Fill(Handle, config, source, ref rect); } - /// - /// Fills the image object.\n - /// Extracts data from @a source image which will be needed for recognition of depicted object in @a location. - /// - /// The source image where image object is depicted. - /// The configuration used for extract recognition data from source. This value can be null. - /// Location of the image object on the source image, or NULL if the object is shown in full - /// is null. - /// - /// The has already been disposed of.\n - /// - or -\n - /// has already been disposed of. - /// class. /// /// The feature is not supported. - public ImageRecognitionConfiguration() + public ImageRecognitionConfiguration() : base("image_recognition") { } diff --git a/src/Tizen.Multimedia/MediaVision/ImageTracker.cs b/src/Tizen.Multimedia/MediaVision/ImageTracker.cs index 1ca7170..7ec69e3 100644 --- a/src/Tizen.Multimedia/MediaVision/ImageTracker.cs +++ b/src/Tizen.Multimedia/MediaVision/ImageTracker.cs @@ -43,7 +43,7 @@ namespace Tizen.Multimedia /// - or -\n /// has already been disposed of. /// - /// has no target. + /// has no target. /// public static async Task TrackAsync(MediaVisionSource source, ImageTrackingModel trackingModel) @@ -71,7 +71,7 @@ namespace Tizen.Multimedia /// - or -\n /// has already been disposed of. /// - /// has no target. + /// has no target. /// public static async Task TrackAsync(MediaVisionSource source, ImageTrackingModel trackingModel, ImageTrackingConfiguration config) diff --git a/src/Tizen.Multimedia/MediaVision/ImageTrackingModel.cs b/src/Tizen.Multimedia/MediaVision/ImageTrackingModel.cs index add2130..7d4f14e 100644 --- a/src/Tizen.Multimedia/MediaVision/ImageTrackingModel.cs +++ b/src/Tizen.Multimedia/MediaVision/ImageTrackingModel.cs @@ -45,7 +45,7 @@ namespace Tizen.Multimedia /// /// Path to the model to load. /// is null. - /// is invalid. + /// is invalid. /// /// The feature is not supported.\n /// - or -\n diff --git a/src/Tizen.Multimedia/MediaVision/MediaVisionError.cs b/src/Tizen.Multimedia/MediaVision/MediaVisionError.cs index 4de8705..8298cfd 100644 --- a/src/Tizen.Multimedia/MediaVision/MediaVisionError.cs +++ b/src/Tizen.Multimedia/MediaVision/MediaVisionError.cs @@ -66,7 +66,7 @@ namespace Tizen.Multimedia /// /// Permission denied /// - PermissionDenied = ErrorCode.PermissionDenied, + PermissionDenied = ErrorCode.NotPermitted, /// /// Not supported format /// diff --git a/src/Tizen.Multimedia/MediaVision/MediaVisionSource.cs b/src/Tizen.Multimedia/MediaVision/MediaVisionSource.cs index 04c7068..3932b2a 100644 --- a/src/Tizen.Multimedia/MediaVision/MediaVisionSource.cs +++ b/src/Tizen.Multimedia/MediaVision/MediaVisionSource.cs @@ -43,6 +43,7 @@ namespace Tizen.Multimedia catch(Exception) { InteropSource.Destroy(_handle); + _disposed = true; throw; } } @@ -202,7 +203,6 @@ namespace Tizen.Multimedia { return; } - InteropSource.Destroy(_handle); _disposed = true; } diff --git a/src/Tizen.Multimedia/MediaVision/PersonRecognizer.cs b/src/Tizen.Multimedia/MediaVision/PersonRecognizer.cs index a6cb655..ca2bdee 100644 --- a/src/Tizen.Multimedia/MediaVision/PersonRecognizer.cs +++ b/src/Tizen.Multimedia/MediaVision/PersonRecognizer.cs @@ -104,7 +104,7 @@ namespace Tizen.Multimedia /// - or -\n /// has already been disposed of. /// - /// + /// /// of does not exists. /// /// diff --git a/src/Tizen.Multimedia/MediaVision/SurveillanceConfiguration.cs b/src/Tizen.Multimedia/MediaVision/SurveillanceConfiguration.cs index 3024ae2..8f1aae3 100644 --- a/src/Tizen.Multimedia/MediaVision/SurveillanceConfiguration.cs +++ b/src/Tizen.Multimedia/MediaVision/SurveillanceConfiguration.cs @@ -21,7 +21,7 @@ namespace Tizen.Multimedia /// public class SurveillanceEngineConfiguration : EngineConfiguration { - internal SurveillanceEngineConfiguration() + internal SurveillanceEngineConfiguration() : base("face_recognition", "image_recognition") { } } diff --git a/src/Tizen.Multimedia/MediaVision/SurveillanceEngine.cs b/src/Tizen.Multimedia/MediaVision/SurveillanceEngine.cs index 37023f4..19518be 100644 --- a/src/Tizen.Multimedia/MediaVision/SurveillanceEngine.cs +++ b/src/Tizen.Multimedia/MediaVision/SurveillanceEngine.cs @@ -101,9 +101,6 @@ namespace Tizen.Multimedia internal abstract void OnEventDetected(IntPtr trigger, IntPtr source, int streamId, IntPtr eventResult, IntPtr userData); - /// - /// Subscribes trigger to process sources pushed from video identified by @a videoStreamId. - /// internal void InvokeAddSource(SurveillanceSource source, SurveillanceEngineConfiguration config) { if (source == null) diff --git a/src/Tizen.Multimedia/Tizen.Multimedia.project.json b/src/Tizen.Multimedia/Tizen.Multimedia.project.json index d7fdcc7..f1eae2a 100755 --- a/src/Tizen.Multimedia/Tizen.Multimedia.project.json +++ b/src/Tizen.Multimedia/Tizen.Multimedia.project.json @@ -3,7 +3,8 @@ "ElmSharp": "1.1.0-*", "NETStandard.Library": "1.6.1", "Tizen": "1.0.3", - "Tizen.Applications": "1.3.2" + "Tizen.Applications": "1.3.2", + "Tizen.System.Information": "1.0.3" }, "frameworks": { "netstandard1.3": {} -- 2.7.4