From 2899fb61d265b54da4aa1c9695312f1e75c96f9e Mon Sep 17 00:00:00 2001 From: Limin Wang Date: Tue, 11 May 2021 18:35:44 +0800 Subject: avfilter/dnn/dnn_backend_tf: fix cross library usage duplicate ff_hex_to_data() function from avformat and rename it to hex_to_data() as static function. Reviewed-by: Guo, Yejun Signed-off-by: Limin Wang --- libavfilter/dnn/dnn_backend_tf.c | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) (limited to 'libavfilter') diff --git a/libavfilter/dnn/dnn_backend_tf.c b/libavfilter/dnn/dnn_backend_tf.c index 622b5a8464..5908aeb359 100644 --- a/libavfilter/dnn/dnn_backend_tf.c +++ b/libavfilter/dnn/dnn_backend_tf.c @@ -28,8 +28,8 @@ #include "dnn_backend_native_layer_conv2d.h" #include "dnn_backend_native_layer_depth2space.h" #include "libavformat/avio.h" -#include "libavformat/internal.h" #include "libavutil/avassert.h" +#include "libavutil/avstring.h" #include "../internal.h" #include "dnn_backend_native_layer_pad.h" #include "dnn_backend_native_layer_maximum.h" @@ -196,6 +196,36 @@ static DNNReturnType get_output_tf(void *model, const char *input_name, int inpu return ret; } +#define SPACE_CHARS " \t\r\n" +static int hex_to_data(uint8_t *data, const char *p) +{ + int c, len, v; + + len = 0; + v = 1; + for (;;) { + p += strspn(p, SPACE_CHARS); + if (*p == '\0') + break; + c = av_toupper((unsigned char) *p++); + if (c >= '0' && c <= '9') + c = c - '0'; + else if (c >= 'A' && c <= 'F') + c = c - 'A' + 10; + else + break; + v = (v << 4) | c; + if (v & 0x100) { + if (data) { + data[len] = v; + } + len++; + v = 1; + } + } + return len; +} + static DNNReturnType load_tf_model(TFModel *tf_model, const char *model_filename) { TFContext *ctx = &tf_model->ctx; @@ -220,14 +250,17 @@ static DNNReturnType load_tf_model(TFModel *tf_model, const char *model_filename return DNN_ERROR; } config = tf_model->ctx.options.sess_config + 2; - sess_config_length = ff_hex_to_data(NULL, config); + sess_config_length = hex_to_data(NULL, config); sess_config = av_mallocz(sess_config_length + AV_INPUT_BUFFER_PADDING_SIZE); if (!sess_config) { av_log(ctx, AV_LOG_ERROR, "failed to allocate memory\n"); return DNN_ERROR; } - ff_hex_to_data(sess_config, config); + if (hex_to_data(sess_config, config) < 0) { + av_log(ctx, AV_LOG_ERROR, "failed to convert hex to data\n"); + return DNN_ERROR; + } } graph_def = read_graph(model_filename); -- cgit v1.2.3