| 
									
										
										
										
											2021-11-30 10:10:53 +08:00
										 |  |  | //
 | 
					
						
							|  |  |  | //  ImageProcessFunction.hpp
 | 
					
						
							|  |  |  | //  MNN
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  Created by MNN on 2021/10/29.
 | 
					
						
							|  |  |  | //  Copyright © 2018 Alibaba. All rights reserved.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef ImageProcessFunction_hpp
 | 
					
						
							|  |  |  | #define ImageProcessFunction_hpp
 | 
					
						
							|  |  |  | #include <MNN/ImageProcess.hpp>
 | 
					
						
							|  |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #include <memory>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // blitter functions
 | 
					
						
							|  |  |  | void MNNGRAYToC4(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNGRAYToC3(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNC3ToC4(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNRGBAToBGRA(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNRGBAToBGR(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNRGBToBGR(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNBGRAToBGR(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNBGRAToGRAY(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNRGBAToGRAY(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNC3ToYUV(const unsigned char* source, unsigned char* dest, size_t count, bool bgr, bool yuv); | 
					
						
							|  |  |  | void MNNC3ToXYZ(const unsigned char* source, unsigned char* dest, size_t count, bool bgr); | 
					
						
							| 
									
										
										
										
											2022-01-04 10:50:40 +08:00
										 |  |  | void MNNC3ToHSV(const unsigned char* source, unsigned char* dest, size_t count, bool bgr, bool full); | 
					
						
							| 
									
										
										
										
											2021-11-30 10:10:53 +08:00
										 |  |  | void MNNC3ToBGR555(const unsigned char* source, unsigned char* dest, size_t count, bool bgr); | 
					
						
							|  |  |  | void MNNC3ToBGR565(const unsigned char* source, unsigned char* dest, size_t count, bool bgr); | 
					
						
							|  |  |  | void MNNRGBToGRAY(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNBRGToGRAY(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNNV21ToRGBA(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNNV21ToRGB(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNNV21ToBGRA(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNNV21ToBGR(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | // float blitter functions
 | 
					
						
							|  |  |  | void MNNC1ToFloatC1(const unsigned char* source, float* dest, const float* mean, const float* normal, size_t count); | 
					
						
							|  |  |  | void MNNC3ToFloatC3(const unsigned char* source, float* dest, const float* mean, const float* normal, size_t count); | 
					
						
							|  |  |  | void MNNC4ToFloatC4(const unsigned char* source, float* dest, const float* mean, const float* normal, size_t count); | 
					
						
							|  |  |  | void MNNC1ToFloatRGBA(const unsigned char* source, float* dest, const float* mean, const float* normal, size_t count); | 
					
						
							|  |  |  | void MNNC3ToFloatRGBA(const unsigned char* source, float* dest, const float* mean, const float* normal, size_t count); | 
					
						
							|  |  |  | // simple blitter functions
 | 
					
						
							|  |  |  | inline void MNNCopyC1(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     ::memcpy(dest, source, count * sizeof(unsigned char)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNCopyC4(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     ::memcpy(dest, source, 4 * count * sizeof(unsigned char)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNCopyC3(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     ::memcpy(dest, source, 3 * count * sizeof(unsigned char)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNRGBToCrCb(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     MNNC3ToYUV(source, dest, count, false, false); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNBGRToCrCb(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     MNNC3ToYUV(source, dest, count, true, false); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNRGBToYUV(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     MNNC3ToYUV(source, dest, count, false, true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNBGRToYUV(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     MNNC3ToYUV(source, dest, count, true, true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNRGBToXYZ(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     MNNC3ToXYZ(source, dest, count, false); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNBGRToXYZ(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     MNNC3ToXYZ(source, dest, count, true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | static void MNNRGBToHSV(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							| 
									
										
										
										
											2022-01-04 10:50:40 +08:00
										 |  |  |     MNNC3ToHSV(source, dest, count, false, false); | 
					
						
							| 
									
										
										
										
											2021-11-30 10:10:53 +08:00
										 |  |  | } | 
					
						
							|  |  |  | inline void MNNBGRToHSV(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							| 
									
										
										
										
											2022-01-04 10:50:40 +08:00
										 |  |  |     MNNC3ToHSV(source, dest, count, true, false); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | static void MNNRGBToHSV_FULL(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     MNNC3ToHSV(source, dest, count, false, true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNBGRToHSV_FULL(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     MNNC3ToHSV(source, dest, count, true, true); | 
					
						
							| 
									
										
										
										
											2021-11-30 10:10:53 +08:00
										 |  |  | } | 
					
						
							|  |  |  | inline void MNNRGBToBGR555(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     MNNC3ToBGR555(source, dest, count, false); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNBGRToBGR555(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     MNNC3ToBGR555(source, dest, count, true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNRGBToBGR565(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     MNNC3ToBGR565(source, dest, count, false); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNBGRToBGR565(const unsigned char* source, unsigned char* dest, size_t count) { | 
					
						
							|  |  |  |     MNNC3ToBGR565(source, dest, count, true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | // sampler
 | 
					
						
							|  |  |  | void MNNSamplerC4Bilinear(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, | 
					
						
							|  |  |  |                           size_t count, size_t capacity, size_t iw, size_t ih, size_t yStride); | 
					
						
							|  |  |  | void MNNSamplerC3Bilinear(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, | 
					
						
							|  |  |  |                           size_t count, size_t capacity, size_t iw, size_t ih, size_t yStride); | 
					
						
							|  |  |  | void MNNSamplerC1Bilinear(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, | 
					
						
							|  |  |  |                           size_t count, size_t capacity, size_t iw, size_t ih, size_t yStride); | 
					
						
							|  |  |  | void MNNSamplerNearest(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, size_t count, | 
					
						
							|  |  |  |                        size_t iw, size_t ih, size_t yStride, int bpp); | 
					
						
							|  |  |  | void MNNSamplerC4Nearest(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, | 
					
						
							|  |  |  |                          size_t count, size_t capacity, size_t iw, size_t ih, size_t yStride); | 
					
						
							|  |  |  | void MNNSamplerC1Nearest(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, | 
					
						
							|  |  |  |                          size_t count, size_t capacity, size_t iw, size_t ih, size_t yStride); | 
					
						
							|  |  |  | void MNNSamplerC3Nearest(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, | 
					
						
							|  |  |  |                          size_t count, size_t capacity, size_t iw, size_t ih, size_t yStride); | 
					
						
							|  |  |  | void MNNSamplerCopyCommon(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, | 
					
						
							|  |  |  |                           size_t count, size_t iw, size_t ih, size_t yStride, int bpp); | 
					
						
							|  |  |  | inline void MNNSamplerC1Copy(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, size_t count, | 
					
						
							|  |  |  |                       size_t capacity, size_t iw, size_t ih, size_t yStride) { | 
					
						
							|  |  |  |     MNNSamplerCopyCommon(source, dest, points, sta, count, iw, ih, yStride, 1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNSamplerC3Copy(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, size_t count, | 
					
						
							|  |  |  |                       size_t capacity, size_t iw, size_t ih, size_t yStride) { | 
					
						
							|  |  |  |     MNNSamplerCopyCommon(source, dest, points, sta, count, iw, ih, yStride, 3); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | inline void MNNSamplerC4Copy(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, size_t count, | 
					
						
							|  |  |  |                       size_t capacity, size_t iw, size_t ih, size_t yStride) { | 
					
						
							|  |  |  |     MNNSamplerCopyCommon(source, dest, points, sta, count, iw, ih, yStride, 4); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | void MNNSamplerI420Copy(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, | 
					
						
							|  |  |  |                         size_t count, size_t capacity, size_t iw, size_t ih, size_t yStride); | 
					
						
							|  |  |  | void MNNSamplerI420Nearest(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, | 
					
						
							|  |  |  |                            size_t count, size_t capacity, size_t iw, size_t ih, size_t yStride); | 
					
						
							|  |  |  | void MNNSamplerNV21Copy(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, | 
					
						
							|  |  |  |                         size_t count, size_t capacity, size_t iw, size_t ih, size_t yStride); | 
					
						
							|  |  |  | void MNNSamplerNV21Nearest(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, | 
					
						
							|  |  |  |                            size_t count, size_t capacity, size_t iw, size_t ih, size_t yStride); | 
					
						
							|  |  |  | void MNNSamplerNV12Copy(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, | 
					
						
							|  |  |  |                         size_t count, size_t capacity, size_t iw, size_t ih, size_t yStride); | 
					
						
							|  |  |  | void MNNSamplerNV12Nearest(const unsigned char* source, unsigned char* dest, MNN::CV::Point* points, size_t sta, | 
					
						
							|  |  |  |                            size_t count, size_t capacity, size_t iw, size_t ih, size_t yStride); | 
					
						
							| 
									
										
										
										
											2022-02-18 11:30:27 +08:00
										 |  |  | // draw blit
 | 
					
						
							|  |  |  | void MNNC1blitH(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNC3blitH(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							|  |  |  | void MNNC4blitH(const unsigned char* source, unsigned char* dest, size_t count); | 
					
						
							| 
									
										
										
										
											2021-11-30 10:10:53 +08:00
										 |  |  | #endif /* ImageProcessFunction_hpp */
 |