Add testcases for src callback.
Change-Id: Ic04cebf659db149910aafd3beb526d2e05cd8d0b
Signed-off-by: Gichan Jang <gichan2.jang@samsung.com>
extern int utc_ml_pipeline_src_input_data_n (void);
extern int utc_ml_pipeline_src_get_tensors_info_p (void);
extern int utc_ml_pipeline_src_get_tensors_info_n (void);
-extern int utc_ml_pipeline_switch_get_handle_p (void);
+extern int utc_ml_pipeline_src_set_event_cb_p (void);
+extern int utc_ml_pipeline_src_set_event_cb_n1 (void);
+extern int utc_ml_pipeline_src_set_event_cb_n2 (void);
+
+extern int utc_ml_pipeline_switch_get_handle_p (void);
extern int utc_ml_pipeline_switch_get_handle_n (void);
extern int utc_ml_pipeline_switch_release_handle_p (void);
extern int utc_ml_pipeline_switch_release_handle_n (void);
{"utc_ml_pipeline_src_input_data_n", utc_ml_pipeline_src_input_data_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
{"utc_ml_pipeline_src_get_tensors_info_p", utc_ml_pipeline_src_get_tensors_info_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
{"utc_ml_pipeline_src_get_tensors_info_n", utc_ml_pipeline_src_get_tensors_info_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
- {"utc_ml_pipeline_switch_get_handle_p", utc_ml_pipeline_switch_get_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
+ {"utc_ml_pipeline_src_set_event_cb_p", utc_ml_pipeline_src_set_event_cb_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+ {"utc_ml_pipeline_src_set_event_cb_n1", utc_ml_pipeline_src_set_event_cb_n1, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+ {"utc_ml_pipeline_src_set_event_cb_n2", utc_ml_pipeline_src_set_event_cb_n2, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+ {"utc_ml_pipeline_switch_get_handle_p", utc_ml_pipeline_switch_get_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
{"utc_ml_pipeline_switch_get_handle_n", utc_ml_pipeline_switch_get_handle_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
{"utc_ml_pipeline_switch_release_handle_p", utc_ml_pipeline_switch_release_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
{"utc_ml_pipeline_switch_release_handle_n", utc_ml_pipeline_switch_release_handle_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
extern int utc_ml_pipeline_src_input_data_n (void);
extern int utc_ml_pipeline_src_get_tensors_info_p (void);
extern int utc_ml_pipeline_src_get_tensors_info_n (void);
-extern int utc_ml_pipeline_switch_get_handle_p (void);
+extern int utc_ml_pipeline_src_set_event_cb_p (void);
+extern int utc_ml_pipeline_src_set_event_cb_n1 (void);
+extern int utc_ml_pipeline_src_set_event_cb_n2 (void);
+
+extern int utc_ml_pipeline_switch_get_handle_p (void);
extern int utc_ml_pipeline_switch_get_handle_n (void);
extern int utc_ml_pipeline_switch_release_handle_p (void);
extern int utc_ml_pipeline_switch_release_handle_n (void);
{"utc_ml_pipeline_src_input_data_n", utc_ml_pipeline_src_input_data_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
{"utc_ml_pipeline_src_get_tensors_info_p", utc_ml_pipeline_src_get_tensors_info_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
{"utc_ml_pipeline_src_get_tensors_info_n", utc_ml_pipeline_src_get_tensors_info_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
- {"utc_ml_pipeline_switch_get_handle_p", utc_ml_pipeline_switch_get_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
+ {"utc_ml_pipeline_src_set_event_cb_p", utc_ml_pipeline_src_set_event_cb_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+ {"utc_ml_pipeline_src_set_event_cb_n1", utc_ml_pipeline_src_set_event_cb_n1, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+ {"utc_ml_pipeline_src_set_event_cb_n2", utc_ml_pipeline_src_set_event_cb_n2, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+ {"utc_ml_pipeline_switch_get_handle_p", utc_ml_pipeline_switch_get_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
{"utc_ml_pipeline_switch_get_handle_n", utc_ml_pipeline_switch_get_handle_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
{"utc_ml_pipeline_switch_release_handle_p", utc_ml_pipeline_switch_release_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
{"utc_ml_pipeline_switch_release_handle_n", utc_ml_pipeline_switch_release_handle_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
extern int utc_ml_pipeline_src_input_data_n (void);
extern int utc_ml_pipeline_src_get_tensors_info_p (void);
extern int utc_ml_pipeline_src_get_tensors_info_n (void);
+
+extern int utc_ml_pipeline_src_set_event_cb_p (void);
+extern int utc_ml_pipeline_src_set_event_cb_n1 (void);
+extern int utc_ml_pipeline_src_set_event_cb_n2 (void);
extern int utc_ml_pipeline_switch_get_handle_p (void);
extern int utc_ml_pipeline_switch_get_handle_n (void);
{"utc_ml_pipeline_src_get_tensors_info_p", utc_ml_pipeline_src_get_tensors_info_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
{"utc_ml_pipeline_src_get_tensors_info_n", utc_ml_pipeline_src_get_tensors_info_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+ {"utc_ml_pipeline_src_set_event_cb_p", utc_ml_pipeline_src_set_event_cb_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+ {"utc_ml_pipeline_src_set_event_cb_n1", utc_ml_pipeline_src_set_event_cb_n1, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+ {"utc_ml_pipeline_src_set_event_cb_n2", utc_ml_pipeline_src_set_event_cb_n2, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+
{"utc_ml_pipeline_switch_get_handle_p", utc_ml_pipeline_switch_get_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
{"utc_ml_pipeline_switch_get_handle_n", utc_ml_pipeline_switch_get_handle_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
{"utc_ml_pipeline_switch_release_handle_p", utc_ml_pipeline_switch_release_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
extern int utc_ml_pipeline_src_input_data_n (void);
extern int utc_ml_pipeline_src_get_tensors_info_p (void);
extern int utc_ml_pipeline_src_get_tensors_info_n (void);
-extern int utc_ml_pipeline_switch_get_handle_p (void);
+extern int utc_ml_pipeline_src_set_event_cb_p (void);
+extern int utc_ml_pipeline_src_set_event_cb_n1 (void);
+extern int utc_ml_pipeline_src_set_event_cb_n2 (void);
+
+extern int utc_ml_pipeline_switch_get_handle_p (void);
extern int utc_ml_pipeline_switch_get_handle_n (void);
extern int utc_ml_pipeline_switch_release_handle_p (void);
extern int utc_ml_pipeline_switch_release_handle_n (void);
{"utc_ml_pipeline_src_input_data_n", utc_ml_pipeline_src_input_data_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
{"utc_ml_pipeline_src_get_tensors_info_p", utc_ml_pipeline_src_get_tensors_info_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
{"utc_ml_pipeline_src_get_tensors_info_n", utc_ml_pipeline_src_get_tensors_info_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
- {"utc_ml_pipeline_switch_get_handle_p", utc_ml_pipeline_switch_get_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
+ {"utc_ml_pipeline_src_set_event_cb_p", utc_ml_pipeline_src_set_event_cb_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+ {"utc_ml_pipeline_src_set_event_cb_n1", utc_ml_pipeline_src_set_event_cb_n1, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+ {"utc_ml_pipeline_src_set_event_cb_n2", utc_ml_pipeline_src_set_event_cb_n2, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+ {"utc_ml_pipeline_switch_get_handle_p", utc_ml_pipeline_switch_get_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
{"utc_ml_pipeline_switch_get_handle_n", utc_ml_pipeline_switch_get_handle_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
{"utc_ml_pipeline_switch_release_handle_p", utc_ml_pipeline_switch_release_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
{"utc_ml_pipeline_switch_release_handle_n", utc_ml_pipeline_switch_release_handle_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
return;
}
- pipeline = g_strdup ("appsrc name=srcx ! other/tensor,dimension=(string)4:1:1:1,type=(string)uint8,framerate=(fraction)0/1 ! tensor_sink");
+ pipeline = g_strdup ("appsrc name=srcx ! other/tensor,dimension=(string)4:1:1:1,type=(string)uint8,framerate=(fraction)0/1 ! tensor_sink name=sinkx");
status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
status = ml_pipeline_start (handle);
return 0;
}
+
+/* @function test_src_cb_push_dummy
+ * @description Internal function to push dummy into appsrc.
+ */
+
+static void
+test_src_cb_push_dummy (ml_pipeline_src_h src_handle)
+{
+ ml_tensors_data_h data;
+ ml_tensors_info_h info;
+
+ if (ml_pipeline_src_get_tensors_info (src_handle, &info) == ML_ERROR_NONE) {
+ ml_tensors_data_create (info, &data);
+ ml_pipeline_src_input_data (src_handle, data, ML_PIPELINE_BUF_POLICY_AUTO_FREE);
+ ml_tensors_info_destroy (info);
+ }
+}
+
+
+/* @function test_src_cb_need_data
+ * @description A appsrc callback for src handle in a pipeline
+ */
+static void
+test_src_cb_need_data (ml_pipeline_src_h src_handle, unsigned int length,
+ void *user_data)
+{
+ test_src_cb_push_dummy (src_handle);
+}
+
+/**
+ * @testcase utc_ml_pipeline_src_set_event_cb_p
+ * @since_tizen 6.5
+ * @description Test NNStreamer pipeline set src callback
+ */
+int utc_ml_pipeline_src_set_event_cb_p (void)
+{
+ IS_SUPPORT_FEATURE;
+
+ ml_pipeline_sink_h sinkhandle;
+ ml_pipeline_src_callbacks_s callback = { 0, };
+ guint *count_sink;
+
+ callback.need_data = test_src_cb_need_data;
+
+ count_sink = (guint *) g_malloc0 (sizeof (guint));
+ assert_neq (count_sink, NULL);
+
+ status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
+ assert_eq (status, ML_ERROR_NONE);
+
+ status = ml_pipeline_src_get_handle (handle, "srcx", &srchandle);
+ assert_eq (status, ML_ERROR_NONE);
+
+ status = ml_pipeline_src_set_event_cb (srchandle, &callback, NULL);
+ assert_eq (status, ML_ERROR_NONE);
+
+ status = ml_pipeline_sink_register (
+ handle, "sinkx", test_sink_callback_count, count_sink, &sinkhandle);
+ assert_eq (status, ML_ERROR_NONE);
+
+ status = ml_pipeline_start (handle);
+ assert_eq (status, ML_ERROR_NONE);
+
+ test_src_cb_push_dummy (srchandle);
+ g_usleep (100000);
+
+ status = ml_pipeline_stop (handle);
+ assert_eq (status, ML_ERROR_NONE);
+
+ assert_gt (*count_sink, 1U);
+
+ status = ml_pipeline_src_release_handle (srchandle);
+ assert_eq (status, ML_ERROR_NONE);
+
+ status = ml_pipeline_src_release_handle (sinkhandle);
+ assert_eq (status, ML_ERROR_NONE);
+
+ g_free (count_sink);
+
+ return 0;
+}
+
+/**
+ * @testcase utc_ml_pipeline_src_set_event_cb_n1
+ * @since_tizen 6.5
+ * @description Test NNStreamer pipeline set src callback with invalid param
+ */
+int utc_ml_pipeline_src_set_event_cb_n1 (void)
+{
+ IS_SUPPORT_FEATURE;
+ ml_pipeline_src_callbacks_s callback;
+
+ status = ml_pipeline_src_get_handle (handle, "srcx", &srchandle);
+ assert_eq (status, ML_ERROR_NONE);
+
+ /* invalid param */
+ status = ml_pipeline_src_set_event_cb (NULL, &callback, NULL);
+ assert_eq (status, ML_ERROR_INVALID_PARAMETER);
+
+ status = ml_pipeline_src_release_handle (srchandle);
+ assert_eq (status, ML_ERROR_NONE);
+
+ return 0;
+}
+
+/**
+ * @testcase utc_ml_pipeline_src_set_event_cb_n2
+ * @since_tizen 6.5
+ * @description Test NNStreamer pipeline set src callback with invalid param
+ */
+int utc_ml_pipeline_src_set_event_cb_n2 (void)
+{
+ IS_SUPPORT_FEATURE;
+
+ status = ml_pipeline_src_get_handle (handle, "srcx", &srchandle);
+ assert_eq (status, ML_ERROR_NONE);
+
+ /* invalid param */
+ status = ml_pipeline_src_set_event_cb (srchandle, NULL, NULL);
+ assert_eq (status, ML_ERROR_INVALID_PARAMETER);
+
+ status = ml_pipeline_src_release_handle (srchandle);
+ assert_eq (status, ML_ERROR_NONE);
+
+ return 0;
+}