}
/**
+ * @brief Validate converter sub-plugin's data.
+ */
+static gboolean
+nnstreamer_converter_validate (const NNStreamerExternalConverter * converter)
+{
+ if (!converter || !converter->name) {
+ /* invalid name */
+ return FALSE;
+ }
+
+ if (!converter->query_caps || !converter->get_out_config
+ || !converter->convert) {
+ /* invalid methods in converter sub-plugin */
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**
* @brief Converter's external subplugins should call this at init.
*/
int
registerExternalConverter (NNStreamerExternalConverter * ex)
{
+ g_return_val_if_fail (nnstreamer_converter_validate (ex), FALSE);
return register_subplugin (NNS_SUBPLUGIN_CONVERTER, ex->name, ex);
}
#include <unittest_util.h>\r
#include <tensor_converter_custom.h>\r
#include <flatbuffers/flexbuffers.h>\r
+#include <nnstreamer_plugin_api_converter.h>\r
\r
#define TEST_TIMEOUT_MS (1000U)\r
\r
EXPECT_NE (0, nnstreamer_converter_custom_unregister ("tconv"));\r
}\r
\r
+/** @brief tensor converter plugin's query caps callback */\r
+static GstCaps *\r
+conv_query_caps (const GstTensorsConfig *config)\r
+{\r
+ return NULL;\r
+}\r
+\r
+/** @brief tensor converter plugin's get out caps callback */\r
+static gboolean\r
+conv_get_out_config (const GstCaps *in_cap, GstTensorsConfig *config)\r
+{\r
+ return TRUE;\r
+}\r
+\r
+/** @brief tensor converter plugin's convert callback\r
+ */\r
+static GstBuffer *\r
+conv_convert (GstBuffer *in_buf, gsize *frame_size, guint *frames_in, GstTensorsConfig *config)\r
+{\r
+ return NULL;\r
+}\r
+\r
+/**\r
+ * @brief Get default external converter\r
+ */\r
+static NNStreamerExternalConverter *\r
+get_default_external_converter (const gchar *name)\r
+{\r
+ NNStreamerExternalConverter *sub = g_try_new0 (NNStreamerExternalConverter, 1);\r
+ g_assert (sub);\r
+\r
+ sub->name = (char *) g_strdup (name);\r
+ sub->query_caps = conv_query_caps;\r
+ sub->get_out_config = conv_get_out_config;\r
+ sub->convert = conv_convert;\r
+\r
+ return sub;\r
+}\r
+\r
+/**\r
+ * @brief Free converter subplugin\r
+ */\r
+static void\r
+free_default_external_converter (NNStreamerExternalConverter *sub)\r
+{\r
+ g_free ((char *)sub->name);\r
+ g_free (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration\r
+ */\r
+TEST (tensorConverter, subpluginNoraml)\r
+{\r
+ NNStreamerExternalConverter *sub = get_default_external_converter ("mode");\r
+\r
+ EXPECT_TRUE (registerExternalConverter (sub));\r
+\r
+ unregisterExternalConverter ("mode");\r
+ free_default_external_converter (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginInvalidParam0_n)\r
+{\r
+ EXPECT_FALSE (registerExternalConverter (NULL));\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginInvalidParam1_n)\r
+{\r
+ NNStreamerExternalConverter *sub = get_default_external_converter (NULL);\r
+\r
+ EXPECT_FALSE (registerExternalConverter (sub));\r
+\r
+ free_default_external_converter (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginInvalidParam2_n)\r
+{\r
+ NNStreamerExternalConverter *sub = get_default_external_converter ("mode");\r
+\r
+ sub->query_caps = NULL;\r
+ EXPECT_FALSE (registerExternalConverter (sub));\r
+\r
+ free_default_external_converter (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginInvalidParam3_n)\r
+{\r
+ NNStreamerExternalConverter *sub = get_default_external_converter ("mode");\r
+\r
+ sub->get_out_config = NULL;\r
+ EXPECT_FALSE (registerExternalConverter (sub));\r
+\r
+ free_default_external_converter (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginInvalidParam4_n)\r
+{\r
+ NNStreamerExternalConverter *sub = get_default_external_converter ("mode");\r
+\r
+ sub->convert = NULL;\r
+ EXPECT_FALSE (registerExternalConverter (sub));\r
+\r
+ free_default_external_converter (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginInvalidParam5_n)\r
+{\r
+ NNStreamerExternalConverter *sub = get_default_external_converter ("any");\r
+\r
+ EXPECT_FALSE (registerExternalConverter (sub));\r
+\r
+ free_default_external_converter (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginFindInvalidParam_n)\r
+{\r
+ EXPECT_FALSE (nnstreamer_converter_find (NULL));\r
+}\r
+\r
/**\r
* @brief Main GTest\r
*/\r
#include <unittest_util.h>\r
#include <tensor_decoder_custom.h>\r
#include <flatbuffers/flexbuffers.h>\r
+#include <nnstreamer_plugin_api_decoder.h>\r
\r
#define TEST_TIMEOUT_MS (1000U)\r
\r
EXPECT_NE (0, nnstreamer_decoder_custom_unregister ("tdec"));\r
}\r
\r
+/** @brief tensordec-plugin's init callback */\r
+static int\r
+decsub_init (void **pdata)\r
+{\r
+ return TRUE;\r
+}\r
+\r
+/** @brief tensordec-plugin's getOutCaps callback */\r
+static GstCaps *\r
+decsub_getOutCaps (void **pdata, const GstTensorsConfig *config)\r
+{\r
+ return NULL;\r
+}\r
+\r
+/** @brief tensordec-plugin's decode callback */\r
+static GstFlowReturn\r
+decsub_decode (void **pdata, const GstTensorsConfig * config,\r
+ const GstTensorMemory * input, GstBuffer * outbuf)\r
+{\r
+ return GST_FLOW_OK;\r
+}\r
+\r
+/**\r
+ * @brief Get default decoder subplugin\r
+ */\r
+static GstTensorDecoderDef *\r
+get_default_decoder (const gchar *name)\r
+{\r
+ GstTensorDecoderDef *sub = g_try_new0 (GstTensorDecoderDef, 1);\r
+ g_assert (sub);\r
+\r
+ sub->modename = (char *) g_strdup (name);\r
+ sub->init = decsub_init;\r
+ sub->getOutCaps = decsub_getOutCaps;\r
+ sub->decode = decsub_decode;\r
+\r
+ return sub;\r
+}\r
+\r
+/**\r
+ * @brief Free decoder subplugin\r
+ */\r
+static void\r
+free_default_decoder (GstTensorDecoderDef *sub)\r
+{\r
+ g_free ((char *)sub->modename);\r
+ g_free (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration\r
+ */\r
+TEST (tensorDecoder, subpluginNoraml)\r
+{\r
+ GstTensorDecoderDef *sub = get_default_decoder ("mode");\r
+\r
+ EXPECT_TRUE (nnstreamer_decoder_probe (sub));\r
+\r
+ nnstreamer_decoder_exit ("mode");\r
+ free_default_decoder (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, probeSubplugInvalidParam0_n)\r
+{\r
+ GstTensorDecoderDef *sub = get_default_decoder (NULL);\r
+\r
+ EXPECT_FALSE (nnstreamer_decoder_probe (sub));\r
+\r
+ free_default_decoder (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, probeSubplugInvalidParam1_n)\r
+{\r
+ GstTensorDecoderDef *sub = get_default_decoder ("mode");\r
+\r
+ sub->init = NULL;\r
+ EXPECT_FALSE (nnstreamer_decoder_probe (sub));\r
+\r
+ free_default_decoder (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, probeSubplugInvalidParam2_n)\r
+{\r
+ GstTensorDecoderDef *sub = get_default_decoder ("mode");\r
+\r
+ sub->getOutCaps = NULL;\r
+ EXPECT_FALSE (nnstreamer_decoder_probe (sub));\r
+\r
+ free_default_decoder (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, probeSubplugInvalidParam3_n)\r
+{\r
+ GstTensorDecoderDef *sub = get_default_decoder ("mode");\r
+\r
+ sub->decode = NULL;\r
+ EXPECT_FALSE (nnstreamer_decoder_probe (sub));\r
+\r
+ free_default_decoder (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, probeSubplugInvalidParam4_n)\r
+{\r
+ GstTensorDecoderDef *sub = get_default_decoder ("any");\r
+\r
+ EXPECT_FALSE (nnstreamer_decoder_probe (sub));\r
+\r
+ free_default_decoder (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, probeSubplugInvalidParam5_n)\r
+{\r
+ EXPECT_FALSE (nnstreamer_decoder_probe (NULL));\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, subplugFindInvalidParam_n)\r
+{\r
+ EXPECT_EQ (NULL, nnstreamer_decoder_find (NULL));\r
+}\r
+\r
/**\r
* @brief Main GTest\r
*/\r