From 602eb73bcc649e947bec8d78c7b7ac6bce16c003 Mon Sep 17 00:00:00 2001 From: Jaeyun Jung Date: Wed, 28 Aug 2024 10:57:55 +0900 Subject: [PATCH] [Event] util to get data Add util function to get the edge event data, and remove unnecessary return code. Signed-off-by: Jaeyun Jung --- include/nnstreamer-edge-event.h | 19 +++- .../nnstreamer-edge-event.c | 30 +++++ tests/unittest_nnstreamer-edge.cc | 106 ++++++++++++++++++ 3 files changed, 149 insertions(+), 6 deletions(-) diff --git a/include/nnstreamer-edge-event.h b/include/nnstreamer-edge-event.h index 36793c0..e885615 100644 --- a/include/nnstreamer-edge-event.h +++ b/include/nnstreamer-edge-event.h @@ -49,7 +49,6 @@ typedef int (*nns_edge_event_cb) (nns_edge_event_h event_h, void *user_data); * @param[out] event The event type, value of @a nns_edge_event_e. * @return 0 on success. Otherwise a negative error value. * @retval #NNS_EDGE_ERROR_NONE Successful. - * @retval #NNS_EDGE_ERROR_NOT_SUPPORTED Not supported. * @retval #NNS_EDGE_ERROR_INVALID_PARAMETER Given parameter is invalid. */ int nns_edge_event_get_type (nns_edge_event_h event_h, nns_edge_event_e *event); @@ -61,7 +60,6 @@ int nns_edge_event_get_type (nns_edge_event_h event_h, nns_edge_event_e *event); * @param[out] data_h Handle of received data. * @return 0 on success. Otherwise a negative error value. * @retval #NNS_EDGE_ERROR_NONE Successful. - * @retval #NNS_EDGE_ERROR_NOT_SUPPORTED Not supported. * @retval #NNS_EDGE_ERROR_INVALID_PARAMETER Given parameter is invalid */ int nns_edge_event_parse_new_data (nns_edge_event_h event_h, nns_edge_data_h *data_h); @@ -73,7 +71,6 @@ int nns_edge_event_parse_new_data (nns_edge_event_h event_h, nns_edge_data_h *da * @param[out] capability Capability string. * @return 0 on success. Otherwise a negative error value. * @retval #NNS_EDGE_ERROR_NONE Successful. - * @retval #NNS_EDGE_ERROR_NOT_SUPPORTED Not supported. * @retval #NNS_EDGE_ERROR_INVALID_PARAMETER Given parameter is invalid */ int nns_edge_event_parse_capability (nns_edge_event_h event_h, char **capability); @@ -87,7 +84,6 @@ int nns_edge_event_parse_capability (nns_edge_event_h event_h, char **capability * @param[in] destroy_cb A callback function to free the event data. * @return 0 on success. Otherwise a negative error value. * @retval #NNS_EDGE_ERROR_NONE Successful. - * @retval #NNS_EDGE_ERROR_NOT_SUPPORTED Not supported. * @retval #NNS_EDGE_ERROR_INVALID_PARAMETER Given parameter is invalid. * @retval #NNS_EDGE_ERROR_OUT_OF_MEMORY Failed to allocate required memory. */ @@ -120,15 +116,26 @@ int nns_edge_event_destroy (nns_edge_event_h event_h); * @brief Set event data. * @param[in] event_h The handle of edge event. * @param[in] data A pointer to event data. - * @param[in] data_len Length of the event data. + * @param[in] data_len The byte size of the event data. * @param[in] destroy_cb A callback function to destroy the event data. * @return 0 on success. Otherwise a negative error value. * @retval #NNS_EDGE_ERROR_NONE Successful. - * @retval #NNS_EDGE_ERROR_NOT_SUPPORTED Not supported. * @retval #NNS_EDGE_ERROR_INVALID_PARAMETER Given parameter is invalid. */ int nns_edge_event_set_data (nns_edge_event_h event_h, void *data, nns_size_t data_len, nns_edge_data_destroy_cb destroy_cb); +/** + * @brief Get event data. + * @note DO NOT release returned data. You should copy the data to another buffer if the returned data is necessary. + * @param[in] event_h The handle of edge event. + * @param[out] data The data in the event handle. + * @param[out] data_len The byte size of the event data. + * @return 0 on success. Otherwise a negative error value. + * @retval #NNS_EDGE_ERROR_NONE Successful. + * @retval #NNS_EDGE_ERROR_INVALID_PARAMETER Given parameter is invalid. + */ +int nns_edge_event_get_data (nns_edge_event_h event_h, void **data, nns_size_t *data_len); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/src/libnnstreamer-edge/nnstreamer-edge-event.c b/src/libnnstreamer-edge/nnstreamer-edge-event.c index 44b7edb..b5ab54a 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-event.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-event.c @@ -161,6 +161,36 @@ nns_edge_event_set_data (nns_edge_event_h event_h, void *data, return NNS_EDGE_ERROR_NONE; } +/** + * @brief Get event data. + */ +int +nns_edge_event_get_data (nns_edge_event_h event_h, void **data, + nns_size_t * data_len) +{ + nns_edge_event_s *ee; + + ee = (nns_edge_event_s *) event_h; + + if (!nns_edge_handle_is_valid (ee)) { + nns_edge_loge ("Invalid param, given edge event is invalid."); + return NNS_EDGE_ERROR_INVALID_PARAMETER; + } + + if (!data || !data_len) { + nns_edge_loge ("Invalid param, data and len should not be null."); + return NNS_EDGE_ERROR_INVALID_PARAMETER; + } + + nns_edge_lock (ee); + + *data = ee->data.data; + *data_len = ee->data.data_len; + + nns_edge_unlock (ee); + return NNS_EDGE_ERROR_NONE; +} + /** * @brief Get the nnstreamer edge event type. */ diff --git a/tests/unittest_nnstreamer-edge.cc b/tests/unittest_nnstreamer-edge.cc index 0fb5398..050c365 100644 --- a/tests/unittest_nnstreamer-edge.cc +++ b/tests/unittest_nnstreamer-edge.cc @@ -2643,6 +2643,112 @@ TEST(edgeEvent, setDataInvalidParam04_n) SAFE_FREE (data); } +/** + * @brief Get edge event data. + */ +TEST(edgeEvent, getData) +{ + nns_edge_event_h event_h; + void *input = NULL, *output = NULL; + nns_size_t input_len = 0U, output_len = 0U; + int ret; + + input_len = 10U * sizeof (int); + input = malloc (input_len); + ASSERT_TRUE (input != NULL); + + ret = nns_edge_event_create (NNS_EDGE_EVENT_CUSTOM, &event_h); + EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE); + + ret = nns_edge_event_set_data (event_h, input, input_len, NULL); + EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE); + + ret = nns_edge_event_get_data (event_h, &output, &output_len); + EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE); + EXPECT_TRUE (input == output); + EXPECT_TRUE (input_len == output_len); + + ret = nns_edge_event_destroy (event_h); + EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE); + + SAFE_FREE (input); +} + +/** + * @brief Get edge event data - invalid param. + */ +TEST(edgeEvent, getDataInvalidParam01_n) +{ + void *data; + nns_size_t data_len; + int ret; + + ret = nns_edge_event_get_data (NULL, &data, &data_len); + EXPECT_NE (ret, NNS_EDGE_ERROR_NONE); +} + +/** + * @brief Get edge event data - invalid param. + */ +TEST(edgeEvent, getDataInvalidParam02_n) +{ + nns_edge_event_h event_h; + nns_size_t data_len; + int ret; + + ret = nns_edge_event_create (NNS_EDGE_EVENT_CUSTOM, &event_h); + EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE); + + ret = nns_edge_event_get_data (event_h, NULL, &data_len); + EXPECT_NE (ret, NNS_EDGE_ERROR_NONE); + + ret = nns_edge_event_destroy (event_h); + EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE); +} + +/** + * @brief Get edge event data - invalid param. + */ +TEST(edgeEvent, getDataInvalidParam03_n) +{ + nns_edge_event_h event_h; + void *data; + int ret; + + ret = nns_edge_event_create (NNS_EDGE_EVENT_CUSTOM, &event_h); + EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE); + + ret = nns_edge_event_get_data (event_h, &data, NULL); + EXPECT_NE (ret, NNS_EDGE_ERROR_NONE); + + ret = nns_edge_event_destroy (event_h); + EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE); +} + +/** + * @brief Get edge event data - invalid param. + */ +TEST(edgeEvent, getDataInvalidParam04_n) +{ + nns_edge_event_h event_h; + void *data; + nns_size_t data_len; + int ret; + + ret = nns_edge_event_create (NNS_EDGE_EVENT_CUSTOM, &event_h); + EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE); + + nns_edge_handle_set_magic (event_h, NNS_EDGE_MAGIC_DEAD); + + ret = nns_edge_event_get_data (event_h, &data, &data_len); + EXPECT_NE (ret, NNS_EDGE_ERROR_NONE); + + nns_edge_handle_set_magic (event_h, NNS_EDGE_MAGIC); + + ret = nns_edge_event_destroy (event_h); + EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE); +} + /** * @brief Get edge event type. */ -- 2.34.1