#include "libavutil/avassert.h"
#include "dnn_backend_native_layer_pad.h"
-int dnn_load_layer_pad(Layer *layer, AVIOContext *model_file_context, int file_size)
+int ff_dnn_load_layer_pad(Layer *layer, AVIOContext *model_file_context, int file_size, int operands_num)
{
LayerPadParams *params;
int dnn_size = 0;
dnn_size += 8;
layer->params = params;
+ if (layer->input_operand_indexes[0] >= operands_num || layer->output_operand_index >= operands_num) {
+ return 0;
+ }
+
return dnn_size;
}
}
}
-int dnn_execute_layer_pad(DnnOperand *operands, const int32_t *input_operand_indexes,
- int32_t output_operand_index, const void *parameters)
+int ff_dnn_execute_layer_pad(DnnOperand *operands, const int32_t *input_operand_indexes,
+ int32_t output_operand_index, const void *parameters, NativeContext *ctx)
{
int32_t before_paddings;
int32_t after_paddings;
float* output;
- const LayerPadParams *params = (const LayerPadParams *)parameters;
+ const LayerPadParams *params = parameters;
// suppose format is <N, H, W, C>
int32_t input_operand_index = input_operand_indexes[0];
output_operand->dims[2] = new_width;
output_operand->dims[3] = new_channel;
output_operand->data_type = operands[input_operand_index].data_type;
- output_operand->length = calculate_operand_data_length(output_operand);
+ output_operand->length = ff_calculate_operand_data_length(output_operand);
+ if (output_operand->length <= 0) {
+ av_log(ctx, AV_LOG_ERROR, "The output data length overflow\n");
+ return DNN_ERROR;
+ }
output_operand->data = av_realloc(output_operand->data, output_operand->length);
- if (!output_operand->data)
- return -1;
+ if (!output_operand->data) {
+ av_log(ctx, AV_LOG_ERROR, "Failed to reallocate memory for output\n");
+ return DNN_ERROR;
+ }
output = output_operand->data;
// copy the original data