From 3960e105e1b65b9b8e5874438501144085662681 Mon Sep 17 00:00:00 2001 From: Parichay Kapoor Date: Mon, 18 May 2020 23:43:51 +0530 Subject: [PATCH] [single] Add missing gstTensorFilterFramework v1 support Add missing support for gstTensorFilterFramework in checking framework availability for a given backend accelerator/hardware Signed-off-by: Parichay Kapoor --- api/capi/src/nnstreamer-capi-util.c | 11 ++------ .../tensor_filter/tensor_filter_common.c | 33 ++++++++++++++++++++++ .../tensor_filter/tensor_filter_common.h | 7 +++++ 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/api/capi/src/nnstreamer-capi-util.c b/api/capi/src/nnstreamer-capi-util.c index 2a66f1d..afed00a 100644 --- a/api/capi/src/nnstreamer-capi-util.c +++ b/api/capi/src/nnstreamer-capi-util.c @@ -1218,16 +1218,11 @@ ml_check_nnfw_availability (ml_nnfw_type_e nnfw, ml_nnfw_hw_e hw, if (fw_name) { if ((fw = nnstreamer_filter_find (fw_name)) != NULL) { - /** @todo support GstTensorFilterV1 here */ - /** Only check for specific HW, ANY/AUTO are always supported */ - if (hw == ML_NNFW_HW_ANY || hw == ML_NNFW_HW_AUTO) { - *available = true; - } else if (fw->checkAvailability - && fw->checkAvailability (ml_nnfw_to_accl_hw (hw)) != 0) { + *available = gst_tensor_filter_check_hw_availability + (fw, ml_nnfw_to_accl_hw (hw)); + if (*available == false) { ml_logw ("%s is supported but not with the specified hardware.", fw_name); - } else { - *available = true; } } else { ml_logw ("%s is not supported.", fw_name); diff --git a/gst/nnstreamer/tensor_filter/tensor_filter_common.c b/gst/nnstreamer/tensor_filter/tensor_filter_common.c index 2c2b5e1..0c3b6b6 100644 --- a/gst/nnstreamer/tensor_filter/tensor_filter_common.c +++ b/gst/nnstreamer/tensor_filter/tensor_filter_common.c @@ -2038,3 +2038,36 @@ accl_hw_get_type (void) return g_accl_hw_type_id__volatile; } + +/** + * @brief check if the given hw is supported by the framework + */ +gboolean +gst_tensor_filter_check_hw_availability (const GstTensorFilterFramework * fw, + accl_hw hw) +{ + gint idx = 0; + gboolean available = FALSE; + GstTensorFilterFrameworkInfo info; + GstTensorFilterProperties prop; + + /** Only check for specific HW, DEFAULT/AUTO are always supported */ + if (hw == ACCL_AUTO || hw == ACCL_DEFAULT) { + available = TRUE; + } else if (GST_TF_FW_V0 (fw) && + (!fw->checkAvailability || fw->checkAvailability (hw) == 0)) { + available = TRUE; + } else if (GST_TF_FW_V1 (fw)) { + gst_tensor_filter_properties_init (&prop); + if (!fw->getFrameworkInfo (fw, &prop, NULL, &info)) { + for (idx = 0; idx < info.num_hw; idx++) { + if (info.hw_list[idx] == hw) { + available = TRUE; + break; + } + } + } + } + + return available; +} diff --git a/gst/nnstreamer/tensor_filter/tensor_filter_common.h b/gst/nnstreamer/tensor_filter/tensor_filter_common.h index 9579c88..190b231 100644 --- a/gst/nnstreamer/tensor_filter/tensor_filter_common.h +++ b/gst/nnstreamer/tensor_filter/tensor_filter_common.h @@ -184,4 +184,11 @@ extern void gst_tensor_filter_common_open_fw (GstTensorFilterPrivate * priv); */ extern void gst_tensor_filter_common_close_fw (GstTensorFilterPrivate * priv); +/** + * @brief check if the given hw is supported by the framework + */ +extern gboolean +gst_tensor_filter_check_hw_availability (const GstTensorFilterFramework *fw, + accl_hw hw); + #endif /* __G_TENSOR_FILTER_COMMON_H__ */ -- 2.7.4