diff options
author | Matthew Bentham <Matthew.Bentham@arm.com> | 2023-05-30 16:43:14 +0000 |
---|---|---|
committer | Matthew Bentham <matthew.bentham@arm.com> | 2023-06-15 13:28:23 +0000 |
commit | 043613fbb199e2c4fdd12c2c9a1785db9b0c45fa (patch) | |
tree | 95557f79177b38dcd724ee93e3c9174dc58d6ddb /arm_compute/core/Validate.h | |
parent | f1aeab9cfb6e9a2a5a16ed79bf341ad11c555233 (diff) | |
download | ComputeLibrary-043613fbb199e2c4fdd12c2c9a1785db9b0c45fa.tar.gz |
Break up Utils.h a bit to reduce unused code being included everywhere
Move some maths-related things from Utils.h to new Math.h header in utils/math.
Move some routines used for Tensor shape validation to Validate.h
Change-Id: I8ce89fe03ec3ae1b61d1a80c282b8b91eea0cfb3
Signed-off-by: Matthew Bentham <Matthew.Bentham@arm.com>
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/c/VisualCompute/ComputeLibrary/+/524783
Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Tested-by: Viet-Hoa Do <viet-hoa.do@arm.com>
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/9743
Benchmark: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Jakub Sujak <jakub.sujak@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'arm_compute/core/Validate.h')
-rw-r--r-- | arm_compute/core/Validate.h | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/arm_compute/core/Validate.h b/arm_compute/core/Validate.h index e755cacae6..7e387c9cc1 100644 --- a/arm_compute/core/Validate.h +++ b/arm_compute/core/Validate.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2021 Arm Limited. + * Copyright (c) 2016-2021, 2023 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -27,6 +27,7 @@ #include "arm_compute/core/Error.h" #include "arm_compute/core/IKernel.h" #include "arm_compute/core/ITensor.h" +#include "arm_compute/core/Utils.h" #include "arm_compute/core/Window.h" #include <algorithm> @@ -284,6 +285,38 @@ arm_compute::Status error_on_mismatching_dimensions(const char *function, const #define ARM_COMPUTE_RETURN_ERROR_ON_MISMATCHING_DIMENSIONS(...) \ ARM_COMPUTE_RETURN_ON_ERROR(::arm_compute::error_on_mismatching_dimensions(__func__, __FILE__, __LINE__, __VA_ARGS__)) +/** Adjust tensor shape size if width or height are odd for a given multi-planar format. No modification is done for other formats. + * + * @note Adding here a few links discussing the issue of odd size and sharing the same solution: + * <a href="https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/graphics/java/android/graphics/YuvImage.java">Android Source</a> + * <a href="https://groups.google.com/a/webmproject.org/forum/#!topic/webm-discuss/LaCKpqiDTXM">WebM</a> + * <a href="https://bugs.chromium.org/p/libyuv/issues/detail?id=198&can=1&q=odd%20width">libYUV</a> + * <a href="https://sourceforge.net/p/raw-yuvplayer/bugs/1/">YUVPlayer</a> * + * + * @param[in, out] shape Tensor shape of 2D size + * @param[in] format Format of the tensor + * + * @return The adjusted tensor shape. + */ +inline TensorShape adjust_odd_shape(const TensorShape &shape, Format format) +{ + TensorShape output{ shape }; + + // Force width to be even for formats which require subsampling of the U and V channels + if(has_format_horizontal_subsampling(format)) + { + output.set(0, (output.x() + 1) & ~1U); + } + + // Force height to be even for formats which require subsampling of the U and V channels + if(has_format_vertical_subsampling(format)) + { + output.set(1, (output.y() + 1) & ~1U); + } + + return output; +} + /** Return an error if the passed tensor objects are not even. * * @param[in] function Function in which the error occurred. |