{}
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 {
}
ImageDataType &operator=(const ImageDataType &other) = delete;
+
+ std::shared_ptr<BaseDataType> clone() override
+ {
+ return std::make_shared<ImageDataType>(*this);
+ }
};
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 };
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)