[FFmpeg-cvslog] lavfi/dnn_backend_tf: Add TFInferRequest and TFRequestItem
Shubhanshu Saxena
git at videolan.org
Sun Jul 11 16:23:17 EEST 2021
ffmpeg | branch: master | Shubhanshu Saxena <shubhanshu.e01 at gmail.com> | Mon Jul 5 16:18:54 2021 +0530| [a4de605110cb19ea6cf9fc244028f0f37fb40fc0] | committer: Guo Yejun
lavfi/dnn_backend_tf: Add TFInferRequest and TFRequestItem
This commit introduces a typedef TFInferRequest to store
execution parameters for a single call to the TensorFlow C API.
This typedef is used in the TFRequestItem.
Signed-off-by: Shubhanshu Saxena <shubhanshu.e01 at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a4de605110cb19ea6cf9fc244028f0f37fb40fc0
---
libavfilter/dnn/dnn_backend_tf.c | 49 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/libavfilter/dnn/dnn_backend_tf.c b/libavfilter/dnn/dnn_backend_tf.c
index 8762211ebc..578748eb35 100644
--- a/libavfilter/dnn/dnn_backend_tf.c
+++ b/libavfilter/dnn/dnn_backend_tf.c
@@ -56,6 +56,23 @@ typedef struct TFModel{
Queue *inference_queue;
} TFModel;
+/**
+ * Stores execution parameters for single
+ * call to the TensorFlow C API
+ */
+typedef struct TFInferRequest {
+ TF_Output *tf_outputs;
+ TF_Tensor **output_tensors;
+ TF_Output *tf_input;
+ TF_Tensor *input_tensor;
+} TFInferRequest;
+
+typedef struct TFRequestItem {
+ TFInferRequest *infer_request;
+ InferenceItem *inference;
+ // further properties will be added later for async
+} TFRequestItem;
+
#define OFFSET(x) offsetof(TFContext, x)
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM
static const AVOption dnn_tensorflow_options[] = {
@@ -72,6 +89,38 @@ static void free_buffer(void *data, size_t length)
av_freep(&data);
}
+static void tf_free_request(TFInferRequest *request)
+{
+ if (!request)
+ return;
+ if (request->input_tensor) {
+ TF_DeleteTensor(request->input_tensor);
+ request->input_tensor = NULL;
+ }
+ av_freep(&request->tf_input);
+ av_freep(&request->tf_outputs);
+ if (request->output_tensors) {
+ int nb_output = sizeof(*request->output_tensors)/sizeof(request->output_tensors[0]);
+ for (uint32_t i = 0; i < nb_output; ++i) {
+ if (request->output_tensors[i]) {
+ TF_DeleteTensor(request->output_tensors[i]);
+ request->output_tensors[i] = NULL;
+ }
+ }
+ av_freep(&request->output_tensors);
+ }
+}
+
+static TFInferRequest *tf_create_inference_request(void)
+{
+ TFInferRequest *infer_request = av_malloc(sizeof(TFInferRequest));
+ infer_request->tf_outputs = NULL;
+ infer_request->tf_input = NULL;
+ infer_request->input_tensor = NULL;
+ infer_request->output_tensors = NULL;
+ return infer_request;
+}
+
static DNNReturnType extract_inference_from_task(TaskItem *task, Queue *inference_queue)
{
InferenceItem *inference = av_malloc(sizeof(*inference));
More information about the ffmpeg-cvslog
mailing list