uint32_t effective_window_width;
};
+PadData calc_paddata(const FixPadContext &ctx)
+{
+ assert(ctx.output_height > 0);
+ assert(ctx.output_width > 0);
+
+ // calculate padding height, width
+ int64_t i_height = (int64_t)(ctx.output_height - 1) * (int64_t)ctx.stride_height +
+ (int64_t)ctx.effective_window_height - (int64_t)ctx.input_height;
+ int64_t i_width = (int64_t)(ctx.output_width - 1) * (int64_t)ctx.stride_width +
+ (int64_t)ctx.effective_window_width - (int64_t)ctx.input_width;
+ uint32_t pad_height = i_height >= 0 ? (uint32_t)i_height : 0U;
+ uint32_t pad_width = i_width >= 0 ? (uint32_t)i_width : 0U;
+
+ PadData pad_data;
+
+ pad_data.pad()->top(pad_height / 2);
+ pad_data.pad()->bottom(pad_height - pad_data.pad()->top());
+ pad_data.pad()->left(pad_width / 2);
+ pad_data.pad()->right(pad_width - pad_data.pad()->left());
+
+ return pad_data;
+}
+
template <class T> void calc_node_pad(T *node, const FixPadContext &ctx)
{
assert(node != nullptr);