mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-03-07 21:17:58 +00:00
libavfilter/dnn/openvino: Reduce redundant memory allocation
We can directly get data ptr from tensor, so that extral memory allocation can be removed. Signed-off-by: Wenbin Chen <wenbin.chen@intel.com>
This commit is contained in:
parent
49719d3cb5
commit
fa81de4af0
@ -204,7 +204,6 @@ static int fill_model_input_ov(OVModel *ov_model, OVRequestItem *request)
|
||||
ov_tensor_t* tensor = NULL;
|
||||
ov_shape_t input_shape = {0};
|
||||
ov_element_type_e precision;
|
||||
void *input_data_ptr = NULL;
|
||||
#else
|
||||
dimensions_t dims;
|
||||
precision_e precision;
|
||||
@ -249,12 +248,6 @@ static int fill_model_input_ov(OVModel *ov_model, OVRequestItem *request)
|
||||
input.width = dims[2];
|
||||
input.channels = dims[3];
|
||||
input.dt = precision_to_datatype(precision);
|
||||
input.data = av_malloc(input.height * input.width * input.channels * get_datatype_size(input.dt));
|
||||
if (!input.data) {
|
||||
ov_shape_free(&input_shape);
|
||||
return AVERROR(ENOMEM);
|
||||
}
|
||||
input_data_ptr = input.data;
|
||||
#else
|
||||
status = ie_infer_request_get_blob(request->infer_request, task->input_name, &input_blob);
|
||||
if (status != OK) {
|
||||
@ -297,6 +290,26 @@ static int fill_model_input_ov(OVModel *ov_model, OVRequestItem *request)
|
||||
request->lltasks[i] = lltask;
|
||||
request->lltask_count = i + 1;
|
||||
task = lltask->task;
|
||||
#if HAVE_OPENVINO2
|
||||
if (tensor)
|
||||
ov_tensor_free(tensor);
|
||||
status = ov_tensor_create(precision, input_shape, &tensor);
|
||||
ov_shape_free(&input_shape);
|
||||
if (status != OK) {
|
||||
av_log(ctx, AV_LOG_ERROR, "Failed to create tensor from host prt.\n");
|
||||
return ov2_map_error(status, NULL);
|
||||
}
|
||||
status = ov_tensor_data(tensor, &input.data);
|
||||
if (status != OK) {
|
||||
av_log(ctx, AV_LOG_ERROR, "Failed to get input data.\n");
|
||||
return ov2_map_error(status, NULL);
|
||||
}
|
||||
status = ov_infer_request_set_input_tensor(request->infer_request, tensor);
|
||||
if (status != OK) {
|
||||
av_log(ctx, AV_LOG_ERROR, "Failed to Set an input tensor for the model.\n");
|
||||
return ov2_map_error(status, NULL);
|
||||
}
|
||||
#endif
|
||||
switch (ov_model->model->func_type) {
|
||||
case DFT_PROCESS_FRAME:
|
||||
if (task->do_ioproc) {
|
||||
@ -317,24 +330,11 @@ static int fill_model_input_ov(OVModel *ov_model, OVRequestItem *request)
|
||||
av_assert0(!"should not reach here");
|
||||
break;
|
||||
}
|
||||
#if HAVE_OPENVINO2
|
||||
status = ov_tensor_create_from_host_ptr(precision, input_shape, input.data, &tensor);
|
||||
ov_shape_free(&input_shape);
|
||||
if (status != OK) {
|
||||
av_log(ctx, AV_LOG_ERROR, "Failed to create tensor from host prt.\n");
|
||||
return ov2_map_error(status, NULL);
|
||||
}
|
||||
status = ov_infer_request_set_input_tensor(request->infer_request, tensor);
|
||||
if (status != OK) {
|
||||
av_log(ctx, AV_LOG_ERROR, "Failed to Set an input tensor for the model.\n");
|
||||
return ov2_map_error(status, NULL);
|
||||
}
|
||||
#endif
|
||||
input.data = (uint8_t *)input.data
|
||||
+ input.width * input.height * input.channels * get_datatype_size(input.dt);
|
||||
}
|
||||
#if HAVE_OPENVINO2
|
||||
av_freep(&input_data_ptr);
|
||||
ov_tensor_free(tensor);
|
||||
#else
|
||||
ie_blob_free(&input_blob);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user