Visual Servoing Platform  version 3.5.0 under development (2022-02-15)
vpImageIoSimd.cpp
1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2022 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * See the file LICENSE.txt at the root directory of this source
11  * distribution for additional information about the GNU GPL.
12  *
13  * For using ViSP with software that can not be combined with the GNU
14  * GPL, please contact Inria about acquiring a ViSP Professional
15  * Edition License.
16  *
17  * See http://visp.inria.fr for more information.
18  *
19  * This software was developed at:
20  * Inria Rennes - Bretagne Atlantique
21  * Campus Universitaire de Beaulieu
22  * 35042 Rennes Cedex
23  * France
24  *
25  * If you have questions regarding the use of this file, please contact
26  * Inria at visp@inria.fr
27  *
28  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30  *
31  * Description:
32  * Simd backend for JPEG and PNG image I/O operations.
33  *
34  *****************************************************************************/
35 
41 #include "vpImageIoBackend.h"
42 #include <Simd/SimdLib.h>
43 
44 
45 void readSimdlib(vpImage<unsigned char> &I, const std::string &filename)
46 {
47  size_t stride = 0, width = 0, height = 0;
48  SimdPixelFormatType format = SimdPixelFormatGray8;
49  uint8_t* data = SimdImageLoadFromFile(filename.c_str(), &stride, &width, &height, &format);
50  // Since the Simd lib use aligned data, some padding are introduced and we need to take care of it when copying
51  I.init(static_cast<unsigned int>(height), static_cast<unsigned int>(width));
52  for (size_t i = 0; i < height; i++) {
53  memcpy(reinterpret_cast<uint8_t *>(I.bitmap) + i*width, data + i*stride, width);
54  }
55  SimdFree(data);
56 }
57 
58 void readSimdlib(vpImage<vpRGBa> &I, const std::string &filename)
59 {
60  size_t stride = 0, width = 0, height = 0;
61  SimdPixelFormatType format = SimdPixelFormatRgba32;
62  uint8_t* data = SimdImageLoadFromFile(filename.c_str(), &stride, &width, &height, &format);
63  // Since the Simd lib use aligned data, some padding are introduced and we need to take care of it when copying
64  I.init(static_cast<unsigned int>(height), static_cast<unsigned int>(width));
65  for (size_t i = 0; i < height; i++) {
66  memcpy(reinterpret_cast<uint8_t *>(I.bitmap) + i*width*4, data + i*stride, 4*width);
67  }
68  SimdFree(data);
69 }
70 
71 void writeJPEGSimdlib(const vpImage<unsigned char> &I, const std::string &filename, int quality)
72 {
73  SimdImageSaveToFile((const uint8_t *)I.bitmap, I.getWidth()*4, I.getWidth(), I.getHeight(), SimdPixelFormatGray8, SimdImageFileJpeg, quality, filename.c_str());
74 }
75 
76 void writeJPEGSimdlib(const vpImage<vpRGBa> &I, const std::string &filename, int quality)
77 {
78  SimdImageSaveToFile((const uint8_t *)I.bitmap, I.getWidth()*4, I.getWidth(), I.getHeight(), SimdPixelFormatRgba32, SimdImageFileJpeg, quality, filename.c_str());
79 }
80 
81 void writePNGSimdlib(const vpImage<unsigned char> &I, const std::string &filename)
82 {
83  SimdImageSaveToFile((const uint8_t *)I.bitmap, I.getWidth()*4, I.getWidth(), I.getHeight(), SimdPixelFormatGray8, SimdImageFilePng, 90, filename.c_str());
84 }
85 
86 void writePNGSimdlib(const vpImage<vpRGBa> &I, const std::string &filename)
87 {
88  SimdImageSaveToFile((const uint8_t *)I.bitmap, I.getWidth()*4, I.getWidth(), I.getHeight(), SimdPixelFormatRgba32, SimdImageFilePng, 90, filename.c_str());
89 }
Type * bitmap
points toward the bitmap
Definition: vpImage.h:143
void init(unsigned int height, unsigned int width)
Set the size of the image.
Definition: vpImage.h:643
unsigned int getHeight() const
Definition: vpImage.h:188
unsigned int getWidth() const
Definition: vpImage.h:246