auto_zoom: code cleanup with clone() interface 88/311888/3
authorInki Dae <inki.dae@samsung.com>
Thu, 30 May 2024 02:36:56 +0000 (11:36 +0900)
committerInki Dae <inki.dae@samsung.com>
Thu, 30 May 2024 09:20:11 +0000 (18:20 +0900)
Just code cleanup by adding clone() interface to BaseDataType.
With this interface, we can drop unnecessary casting.

Change-Id: Ia0056e744ff4330e33b6a2e53e3ee4e000d5109e
Signed-off-by: Inki Dae <inki.dae@samsung.com>
common/include/SingleoCommonTypes.h
services/auto_zoom/src/AutoZoom.cpp

index 2109088b70853a3b14a3a23d192c8dfa07954d48..1e842ba6facd77dc9fe92a41ea9ae8ad4daba934 100644 (file)
@@ -49,12 +49,19 @@ struct BaseDataType {
        {}
        virtual ~BaseDataType()
        {}
+
+       virtual std::shared_ptr<BaseDataType> clone() = 0;
 };
 
 struct FileDataType : public BaseDataType {
        FileDataType() : BaseDataType(DataType::FILE)
        {}
        std::string _file_name;
+
+       std::shared_ptr<BaseDataType> clone() override
+       {
+               return std::make_shared<FileDataType>(*this);
+       }
 };
 
 struct ImageDataType : public BaseDataType {
@@ -86,6 +93,11 @@ struct ImageDataType : public BaseDataType {
        }
 
        ImageDataType &operator=(const ImageDataType &other) = delete;
+
+       std::shared_ptr<BaseDataType> clone() override
+       {
+               return std::make_shared<ImageDataType>(*this);
+       }
 };
 
 struct RawDataType : public BaseDataType {
@@ -93,6 +105,11 @@ struct RawDataType : public BaseDataType {
        {}
        unsigned char *ptr {};
        size_t size_in_bytes {};
+
+       std::shared_ptr<BaseDataType> clone() override
+       {
+               return std::make_shared<RawDataType>(*this);
+       }
 };
 
 enum class ResultType { NONE, OBJECT_DETECTION, FACE_DETECTION, FACE_LANDMARK };
index ef1ffa41f1b56434d0701d0edb89afda37ecca30..8cfe2ef2d15b6ced5b8dc53fa7b90b3ebfccfe82 100644 (file)
@@ -127,15 +127,12 @@ void AutoZoom::add_input(BaseDataType &input_data)
                return;
        }
 
-       if (input_data._data_type == DataType::FILE) {
-               FileDataType &file_data = dynamic_cast<FileDataType &>(input_data);
-               _input_image_data.enqueue(make_shared<FileDataType>(file_data));
-       } else if (input_data._data_type == DataType::IMAGE) {
-               ImageDataType &image_data = dynamic_cast<ImageDataType &>(input_data);
-               _input_image_data.enqueue(make_shared<ImageDataType>(image_data));
-       } else {
-               throw InvalidParameter("Invalid input data type.");
+       if (input_data._data_type != DataType::IMAGE && input_data._data_type != DataType::FILE) {
+               SINGLEO_LOGE("Only IMAGE and FILE types are allowed.");
+               throw InvalidOperation("Only IMAGE and FILE types are allowed.");
        }
+
+       _input_image_data.enqueue(input_data.clone());
 }
 
 void AutoZoom::runTaskManager(BaseDataType &input_data)