15 #ifndef HIGHWAY_HWY_CONTRIB_IMAGE_IMAGE_H_
16 #define HIGHWAY_HWY_CONTRIB_IMAGE_IMAGE_H_
95 const void* p =
bytes_.get();
102 #if defined(ADDRESS_SANITIZER) || defined(MEMORY_SANITIZER) || \
103 defined(THREAD_SANITIZER)
156 template <
typename ComponentType>
159 using T = ComponentType;
173 return static_cast<const T*
>(
VoidRow(y));
176 return static_cast<const T*
>(
VoidRow(y));
203 template <
typename ComponentType>
206 using T = ComponentType;
218 planes_[i] = std::move(other.planes_[i]);
224 HWY_ABORT(
"Not same size: %zu x %zu, %zu x %zu, %zu x %zu\n",
225 plane0.xsize(), plane0.ysize(), plane1.xsize(), plane1.ysize(),
226 plane2.xsize(), plane2.ysize());
228 planes_[0] = std::move(plane0);
229 planes_[1] = std::move(plane1);
230 planes_[2] = std::move(plane2);
240 planes_[i] = std::move(other.planes_[i]);
262 for (
size_t c = 0; c < 3; ++c) {
288 #if defined(ADDRESS_SANITIZER) || defined(MEMORY_SANITIZER) || \
289 defined(THREAD_SANITIZER)
315 constexpr
Rect(
size_t xbegin,
size_t ybegin,
size_t xsize_max,
316 size_t ysize_max,
size_t xend,
size_t yend)
327 template <
typename Image>
342 template <
typename T>
347 template <
typename T>
352 template <
typename T>
357 template <
typename T>
364 template <
class ImageT>
376 static constexpr
size_t ClampedSize(
size_t begin,
size_t size_max,
378 return (begin + size_max <= end) ? size_max
379 : (end > begin ? end - begin : 0);
390 template <
class Image1,
class Image2>
392 return image1.xsize() == image2.xsize() && image1.ysize() == image2.ysize();
400 const int64_t xsize) {
404 while (x < 0 || x >= xsize) {
408 x = 2 * xsize - 1 - x;
411 return static_cast<size_t>(x);
419 return Mirror(coord,
static_cast<int64_t
>(size));
427 return static_cast<size_t>(coord);
435 template <
class View>
440 const int64_t stride)
const {
447 const int64_t num_after = row -
last_row_;
#define HWY_ALIGNMENT
Definition: aligned_allocator.h:28
#define HWY_RESTRICT
Definition: base.h:58
#define HWY_ABORT(format,...)
Definition: base.h:138
#define HWY_INLINE
Definition: base.h:59
#define HWY_DASSERT(condition)
Definition: base.h:163
#define HWY_MAYBE_UNUSED
Definition: base.h:70
#define HWY_ASSUME_ALIGNED(ptr, align)
Definition: base.h:94
Definition: aligned_allocator.h:164
ImageT planes_[kNumPlanes]
Definition: image.h:303
Image3(const Image3 &other)=delete
HWY_INLINE const T * ConstPlaneRow(const size_t c, const size_t y)
Definition: image.h:248
HWY_INLINE const ImageT & Plane(size_t idx) const
Definition: image.h:259
HWY_INLINE const T * ConstPlaneRow(const size_t c, const size_t y) const
Definition: image.h:245
HWY_INLINE T * MutablePlaneRow(const size_t c, const size_t y)
Definition: image.h:255
HWY_INLINE size_t xsize() const
Definition: image.h:274
HWY_INLINE void * VoidPlaneRow(const size_t c, const size_t y) const
Definition: image.h:287
HWY_INLINE size_t ysize() const
Definition: image.h:275
Image3(Image3 &&other) noexcept
Definition: image.h:216
Image3(const size_t xsize, const size_t ysize)
Definition: image.h:212
Image3 & operator=(const Image3 &other)=delete
Image3(ImageT &&plane0, ImageT &&plane1, ImageT &&plane2)
Definition: image.h:222
Image3()
Definition: image.h:210
Image3 & operator=(Image3 &&other) noexcept
Definition: image.h:238
ComponentType T
Definition: image.h:206
void ShrinkTo(const size_t xsize, const size_t ysize)
Definition: image.h:267
HWY_INLINE T * MutablePlaneRow(const size_t c, const size_t y) const
Definition: image.h:252
HWY_INLINE intptr_t PixelsPerRow() const
Definition: image.h:283
static constexpr size_t kNumPlanes
Definition: image.h:208
HWY_INLINE size_t bytes_per_row() const
Definition: image.h:279
void Swap(Image3 &other)
Definition: image.h:261
HWY_INLINE T * MutableRow(const size_t y) const
Definition: image.h:182
HWY_INLINE const T * ConstRow(const size_t y)
Definition: image.h:175
HWY_INLINE intptr_t PixelsPerRow() const
Definition: image.h:192
HWY_INLINE const T * ConstRow(const size_t y) const
Definition: image.h:172
void InitializePaddingForUnalignedAccesses()
Definition: image.h:168
HWY_INLINE T * MutableRow(const size_t y)
Definition: image.h:185
Image(const size_t xsize, const size_t ysize, size_t bytes_per_row, void *aligned)
Definition: image.h:164
ComponentType T
Definition: image.h:159
Image(const size_t xsize, const size_t ysize)
Definition: image.h:162
constexpr Rect(size_t xbegin, size_t ybegin, size_t xsize_max, size_t ysize_max, size_t xend, size_t yend)
Definition: image.h:315
size_t x0_
Definition: image.h:382
const T * ConstPlaneRow(const Image3< T > &image, size_t c, size_t y) const
Definition: image.h:353
size_t xsize() const
Definition: image.h:371
static constexpr size_t ClampedSize(size_t begin, size_t size_max, size_t end)
Definition: image.h:376
bool IsInside(const ImageT &image) const
Definition: image.h:365
Rect(const Image &image)
Definition: image.h:328
Rect Subrect(size_t xbegin, size_t ybegin, size_t xsize_max, size_t ysize_max)
Definition: image.h:336
T * MutableRow(const Image< T > *image, size_t y) const
Definition: image.h:348
Rect & operator=(const Rect &)=default
const T * ConstRow(const Image< T > *image, size_t y) const
Definition: image.h:343
size_t xsize_
Definition: image.h:385
size_t y0_
Definition: image.h:383
constexpr Rect(size_t xbegin, size_t ybegin, size_t xsize, size_t ysize)
Definition: image.h:323
Rect()
Definition: image.h:331
size_t ysize() const
Definition: image.h:372
Rect(const Rect &)=default
size_t ysize_
Definition: image.h:386
size_t x0() const
Definition: image.h:369
size_t y0() const
Definition: image.h:370
T * MutablePlaneRow(Image3< T > *image, const size_t c, size_t y) const
Definition: image.h:358
const float * operator()(const float *const HWY_RESTRICT row, const int64_t stride) const
Definition: image.h:439
const float *const HWY_RESTRICT first_row_
Definition: image.h:455
const float *const HWY_RESTRICT last_row_
Definition: image.h:456
WrapRowMirror(const View &image, size_t ysize)
Definition: image.h:436
Definition: aligned_allocator.h:23
HWY_MAYBE_UNUSED bool SameSize(const Image1 &image1, const Image2 &image2)
Definition: image.h:391
static HWY_INLINE HWY_MAYBE_UNUSED size_t Mirror(int64_t x, const int64_t xsize)
Definition: image.h:399
std::unique_ptr< T, AlignedFreer > AlignedFreeUniquePtr
Definition: aligned_allocator.h:187
ImageBase & operator=(ImageBase &&other) noexcept=default
Padding
Definition: image.h:113
static size_t VectorSize()
HWY_INLINE size_t xsize() const
Definition: image.h:82
HWY_INLINE void * VoidRow(const size_t y) const
Definition: image.h:101
HWY_INLINE uint8_t * bytes()
Definition: image.h:90
HWY_INLINE const uint8_t * bytes() const
Definition: image.h:94
void Swap(ImageBase &other)
size_t bytes_per_row_
Definition: image.h:131
ImageBase & operator=(const ImageBase &other)=delete
void ShrinkTo(const size_t xsize, const size_t ysize)
Definition: image.h:74
ImageBase()
Definition: image.h:43
HWY_INLINE size_t ysize() const
Definition: image.h:83
static size_t BytesPerRow(const size_t xsize, const size_t sizeof_t)
uint32_t xsize_
Definition: image.h:129
AlignedFreeUniquePtr< uint8_t[]> bytes_
Definition: image.h:132
ImageBase(size_t xsize, size_t ysize, size_t bytes_per_row, void *aligned)
ImageBase(ImageBase &&other) noexcept=default
uint32_t ysize_
Definition: image.h:130
ImageBase(const ImageBase &other)=delete
void InitializePadding(size_t sizeof_t, Padding padding)
HWY_INLINE size_t bytes_per_row() const
Definition: image.h:86
ImageBase(size_t xsize, size_t ysize, size_t sizeof_t)
HWY_INLINE size_t operator()(const int64_t coord, const size_t size) const
Definition: image.h:418
HWY_INLINE const float * operator()(const float *const HWY_RESTRICT row, int64_t) const
Definition: image.h:460
HWY_INLINE size_t operator()(const int64_t coord, size_t) const
Definition: image.h:426