summaryrefslogtreecommitdiff
path: root/inference-engine/thirdparty/clDNN/api/CPP/border.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'inference-engine/thirdparty/clDNN/api/CPP/border.hpp')
-rw-r--r--inference-engine/thirdparty/clDNN/api/CPP/border.hpp139
1 files changed, 139 insertions, 0 deletions
diff --git a/inference-engine/thirdparty/clDNN/api/CPP/border.hpp b/inference-engine/thirdparty/clDNN/api/CPP/border.hpp
new file mode 100644
index 000000000..79c0777fb
--- /dev/null
+++ b/inference-engine/thirdparty/clDNN/api/CPP/border.hpp
@@ -0,0 +1,139 @@
+// Copyright (c) 2018 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+#pragma once
+
+#include "../C/border.h"
+#include "primitive.hpp"
+
+
+namespace cldnn
+{
+/// @addtogroup cpp_api C++ API
+/// @{
+/// @addtogroup cpp_topology Network Topology
+/// @{
+/// @addtogroup cpp_primitives Primitives
+/// @{
+
+/// @brief Type of border that will be added to the input by border layer / primitive.
+enum class border_type : std::int32_t
+{
+ /// @brief All points in the border are set to zero.
+ zero = cldnn_border_zero,
+ /// @brief Border is constructed as an mirror of image (edge is also mirrored).
+ /// @details Size of border in any dimension cannot be larger than size of
+ /// input in the same dimension.
+ mirror = cldnn_border_mirror,
+ /// @brief Border is constructed as an mirror of image (edge is NOT mirrored).
+ /// @details Size of border in any dimension cannot be larger than size of
+ /// input in the same dimension decreased by @c 1.
+ mirror_101 = cldnn_border_mirror_101
+};
+
+
+/// @brief Adds border around input.
+///
+/// @details Applies border of specified type around input data. The size of output data is increased
+/// by @c left_top_sizes and by @right_bottom_sizes.
+/// @n
+/// @n@b Requirements:
+/// @n - @c left_top_sizes and @c right_bottom_sizes must be non-negative on all dimensions and compatible
+/// with size of input (describe the same dimensions).
+/// @n - For @c border_type equal to @c cldnn_border_mirror, @c left_top_sizes and @c right_bottom_sizes
+/// must be lower than or equal to size of input on corresponding dimension (for all dimensions)
+/// @n - For @c border_type equal to @c cldnn_border_mirror_101, @c left_top_sizes and @c right_bottom_sizes
+/// must be lower than size of input on corresponding dimension (for all dimensions)
+/// @n Breaking any of this conditions will cause exeption throw.
+struct border : public primitive_base<border, CLDNN_PRIMITIVE_DESC(border)>
+{
+ CLDNN_DECLARE_PRIMITIVE(border)
+
+ /// @brief Constructs border primitive / layer.
+ ///
+ /// @param id An identifier of new primitive.
+ /// @param input An identifier of primitive which is an input for newly created
+ /// border primitive.
+ /// @param left_top_sizes Sizes of border that needs to be added from left
+ /// (in X dimension) and from top (in Y dimension).
+ /// @param right_bottom_sizes Sizes of border that needs to be added from right
+ /// (in X dimension) and from bottom (in Y dimension).
+ /// @param type Type of added border.
+ /// @param output_padding Optional padding for output from primitive.
+ border(
+ const primitive_id& id,
+ const primitive_id& input,
+ const tensor& left_top_sizes = {0, 0, 0, 0},
+ const tensor& right_bottom_sizes = {0, 0, 0, 0},
+ const border_type type = border_type::zero,
+ const padding& output_padding = padding()
+ )
+ : primitive_base(id, {input}, output_padding),
+ left_top_sizes(left_top_sizes),
+ right_bottom_sizes(right_bottom_sizes),
+ type(type)
+ {
+ }
+
+ /// @brief Constructs border primitive / layer.
+ ///
+ /// @param id An identifier of new primitive.
+ /// @param input An identifier of primitive which is an input for newly created
+ /// border primitive.
+ /// @param x_y_sizes Sizes of border that needs to be added from left and right
+ /// (in X dimension) and from top and bottom (in Y dimension).
+ /// Created border is simmetric (the same size of border applied
+ /// from both sides of input).
+ /// @param type Type of added border.
+ /// @param output_padding Optional padding for output from primitive.
+ border(
+ const primitive_id& id,
+ const primitive_id& input,
+ const tensor& x_y_sizes,
+ const border_type type = border_type::zero,
+ const padding& output_padding = padding()
+ )
+ : border(id, input, x_y_sizes, x_y_sizes, type, output_padding)
+ {
+ }
+
+ /// @brief Constructs a copy from C API @CLDNN_PRIMITIVE_DESC{border}
+ border(const dto* dto)
+ : primitive_base(dto),
+ left_top_sizes(dto->left_top_sizes),
+ right_bottom_sizes(dto->right_bottom_sizes),
+ type(static_cast<border_type>(dto->border_type))
+ {
+ }
+
+ /// @brief Sizes of border that needs to be added from left (in X dimension) and from top (in Y dimension).
+ tensor left_top_sizes;
+ /// @brief Sizes of border that needs to be added from right (in X dimension) and from bottom (in Y dimension).
+ tensor right_bottom_sizes;
+ /// @brief Type of border that needs to be added to the input.
+ border_type type;
+
+protected:
+ void update_dto(dto& dto) const override
+ {
+ dto.left_top_sizes = left_top_sizes;
+ dto.right_bottom_sizes = right_bottom_sizes;
+ dto.border_type = static_cast<cldnn_border_type>(type);
+ }
+};
+/// @}
+/// @}
+/// @}
+}