diff options
author | Guo, Yejun <yejun.guo@intel.com> | 2019-04-25 05:14:33 +0300 |
---|---|---|
committer | Pedro Arthur <bygrandao@gmail.com> | 2019-05-08 18:33:00 +0300 |
commit | 25c1cd909fa6c8b6b778dc24192dc3ec780324b0 (patch) | |
tree | b428c01522b2935d0b6af414580edcdf39370093 /libavfilter/dnn_backend_native.c | |
parent | 7adfb6132e0823de06f92ecbcb485eeb4260d407 (diff) |
libavfilter/dnn: support multiple outputs for tensorflow model
some models such as ssd, yolo have more than one output.
the clean up code in this patch is a little complex, it is because
that set_input_output_tf could be called for many times together
with ff_dnn_execute_model_tf, we have to clean resources for the
case that the two interfaces are called interleaved.
Signed-off-by: Guo, Yejun <yejun.guo@intel.com>
Signed-off-by: Pedro Arthur <bygrandao@gmail.com>
Diffstat (limited to 'libavfilter/dnn_backend_native.c')
-rw-r--r-- | libavfilter/dnn_backend_native.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/libavfilter/dnn_backend_native.c b/libavfilter/dnn_backend_native.c index 18735c025c..8a83c63c73 100644 --- a/libavfilter/dnn_backend_native.c +++ b/libavfilter/dnn_backend_native.c @@ -25,7 +25,7 @@ #include "dnn_backend_native.h" -static DNNReturnType set_input_output_native(void *model, DNNData *input, const char *input_name, const char *output_name) +static DNNReturnType set_input_output_native(void *model, DNNData *input, const char *input_name, const char **output_names, uint32_t nb_output) { ConvolutionalNetwork *network = (ConvolutionalNetwork *)model; InputParams *input_params; @@ -275,7 +275,7 @@ static void depth_to_space(const float *input, float *output, int block_size, in } } -DNNReturnType ff_dnn_execute_model_native(const DNNModel *model, DNNData *output) +DNNReturnType ff_dnn_execute_model_native(const DNNModel *model, DNNData *outputs, uint32_t nb_output) { ConvolutionalNetwork *network = (ConvolutionalNetwork *)model->model; int cur_width, cur_height, cur_channels; @@ -317,10 +317,13 @@ DNNReturnType ff_dnn_execute_model_native(const DNNModel *model, DNNData *output } } - output->data = network->layers[network->layers_num - 1].output; - output->height = cur_height; - output->width = cur_width; - output->channels = cur_channels; + // native mode does not support multiple outputs yet + if (nb_output > 1) + return DNN_ERROR; + outputs[0].data = network->layers[network->layers_num - 1].output; + outputs[0].height = cur_height; + outputs[0].width = cur_width; + outputs[0].channels = cur_channels; return DNN_SUCCESS; } |