Merge commits Tizen 2.2 to Tizen 2.2.1
[platform/framework/native/vision.git] / src / FUixVision_ImageFeatureManagerImpl.cpp
index 856ffad..79318f9 100644 (file)
@@ -28,6 +28,8 @@ namespace Tizen { namespace Uix { namespace Vision
 _ImageFeatureManagerImpl::_ImageFeatureManagerImpl(void)
     : __imageFeatureManager(0)
     , __readOnly(false)
+    , __minSupportedSize(100)
+    , __maxSupportedResolution(16000000)
 {
 }
 
@@ -66,10 +68,28 @@ _ImageFeatureManagerImpl::InitDB(void)
 int
 _ImageFeatureManagerImpl::AddFeature(const Tizen::Base::String& filepath)
 {
-    Tizen::Media::ImageBuffer imBuf;
-    result r = imBuf.Construct(filepath, null, false);
+    Tizen::Media::ImageFormat imgFormat;
+    int imgWidth = 0, imgHeight = 0;
+    result r = Tizen::Media::ImageBuffer::GetImageInfo(filepath, imgFormat, imgWidth, imgHeight);
+
     if (IsFailed(r))
     {
+        SetLastResult(E_INVALID_ARG);
+        return -1;
+    }
+
+    if ((imgWidth < __minSupportedSize || imgHeight < __minSupportedSize) || (imgWidth * imgHeight > __maxSupportedResolution))
+    {
+        SetLastResult(E_INVALID_ARG);
+        return -1;
+    }
+
+    Tizen::Media::ImageBuffer imBuf;
+    r = imBuf.Construct(filepath, null, false);
+
+    if(IsFailed(r))
+    {
+        SetLastResult(E_INVALID_ARG);
         return -1;
     }
 
@@ -92,8 +112,16 @@ _ImageFeatureManagerImpl::AddFeature(const unsigned char* data, int width, int h
     {
         return -1;
     }
+
+    if ((width < __minSupportedSize || height < __minSupportedSize) || (width * height > __maxSupportedResolution))
+    {
+        SetLastResult(E_INVALID_ARG); 
+        return -1;
+    }
+
     Tizen::Text::Utf8Encoding utf8;
-    int index = (int) __imageFeatureManager->addImageToDB(data, width, height, (char*) utf8.GetBytesN(info)->GetPointer());
+    std::unique_ptr<Tizen::Base::ByteBuffer> pBuffer(utf8.GetBytesN(info));
+    int index = (int) __imageFeatureManager->addImageToDB(data, width, height, (char*) pBuffer->GetPointer());
 
     if (index > -1)
     {
@@ -125,7 +153,7 @@ _ImageFeatureManagerImpl::DeleteFeature(int index)
     {
         SetLastResult(E_INVALID_ARG);
     }
-    
+
     return false;
 }
 
@@ -157,14 +185,16 @@ _ImageFeatureManagerImpl::SaveDB(bool optimizeDatabase, const Tizen::Base::Strin
         SysSecureTryReturnResult(NID_UIX, !dbPath->IsEmpty(), E_INVALID_ARG,
                 "database path must not be empty. [E_INVALID_ARG]");
         Tizen::Text::Utf8Encoding utf8;
-        result = __imageFeatureManager->saveDB(optimizeDatabase, (const char*) utf8.GetBytesN(*dbPath)->GetPointer()) ? E_SUCCESS : E_FAILURE;
+        std::unique_ptr<Tizen::Base::ByteBuffer> pBuffer(utf8.GetBytesN(*dbPath));
+        result = __imageFeatureManager->saveDB(optimizeDatabase, (const char*) pBuffer->GetPointer()) ? E_SUCCESS : E_FAILURE;
     }
     else
     {
         if (!__path.IsEmpty())
         {
             Tizen::Text::Utf8Encoding utf8;
-            result = __imageFeatureManager->saveDB(optimizeDatabase, (const char*) utf8.GetBytesN(__path)->GetPointer()) ? E_SUCCESS : E_FAILURE;
+            std::unique_ptr<Tizen::Base::ByteBuffer> pBuffer(utf8.GetBytesN(__path));
+            result = __imageFeatureManager->saveDB(optimizeDatabase, (const char*) pBuffer->GetPointer()) ? E_SUCCESS : E_FAILURE;
             if (E_FAILURE == result && __readOnly)
             {
                 result = E_INVALID_ARG;
@@ -202,7 +232,8 @@ _ImageFeatureManagerImpl::OpenDB(const Tizen::Base::String& dbpath)
     __imageFeatureManager->initDB();
 
     Tizen::Text::Utf8Encoding utf8;
-    switch (__imageFeatureManager->openDB((const char*) utf8.GetBytesN(dbpath)->GetPointer()))
+    std::unique_ptr<Tizen::Base::ByteBuffer> pBuffer(utf8.GetBytesN(dbpath));
+    switch (__imageFeatureManager->openDB((const char*) pBuffer->GetPointer()))
     {
     case 0: //ok
         __path = dbpath;