Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
RawImageMetadata.h
1#pragma once
2
3#include "FrameMetadata.h"
4#include "ImageMetadata.h"
5#include <opencv2/opencv.hpp>
6
7// Interleaved
8
10{
11public:
13 RawImageMetadata(std::string _hint) : FrameMetadata(FrameType::RAW_IMAGE, _hint) {}
15
16 RawImageMetadata(int _width, int _height, int _channels, int _type, size_t _step, int _depth) : FrameMetadata(FrameType::RAW_IMAGE, FrameMetadata::HOST)
17 {
18 if (_channels == 1)
19 {
21 }
22 else
23 {
24 throw AIPException(AIP_NOTIMPLEMENTED, "Use different constructor. This constructor will be deprecated in the future.");
25 }
26
27 width = _width;
28 height = _height;
29 channels = _channels;
30 type = _type;
31 step = _step;
32 depth = _depth;
34 }
35
36 RawImageMetadata(int _width, int _height, ImageMetadata::ImageType _imageType, int _type, size_t alignLength, int _depth, MemType _memType, bool computeStep=false) : FrameMetadata(FrameType::RAW_IMAGE, _memType)
37 {
38 if (!computeStep)
39 {
40 auto _step = alignLength;
41 initData(_width, _height, _imageType, _type, _step, _depth);
42 return;
43 }
44
45 size_t _step = 0;
46 switch (_imageType)
47 {
49 _step = _width;
50 break;
53 _step = _width * 2;
54 break;
57 _step = _width * 3;
58 break;
60 _step = ((_width * 3) >> 1);
61 break;
64 _step = _width * 4;
65 break;
67 _step = _width * 2;
68 break;
73 _step = _width * 1;
74 break;
75 default:
76 auto msg = "Unknown image type<" + std::to_string(imageType) + ">";
77 throw AIPException(AIP_NOTIMPLEMENTED, msg);
78 }
79
80 _step = _step + FrameMetadata::getPaddingLength(_step, alignLength);
81 _step = _step * ImageMetadata::getElemSize(_depth);
82
83 initData(_width, _height, _imageType, _type, _step, _depth);
84 }
85
86 void reset()
87 {
89 // RAW_IMAGE
90 width = NOT_SET_NUM;
91 height = NOT_SET_NUM;
92 channels = NOT_SET_NUM;
93 type = NOT_SET_NUM;
94 step = NOT_SET_NUM;
95 depth = NOT_SET_NUM;
96 }
97
98 bool isSet()
99 {
100 return width != NOT_SET_NUM;
101 }
102
103 void setData(cv::Mat &img)
104 {
105 // applicable only for rgba, mono
106 width = img.cols;
107 height = img.rows;
108 channels = img.channels();
109 type = img.type();
110 step = img.step;
111 depth = img.depth();
112 setDataSize();
113 }
114
115 void setData(RawImageMetadata &metadata)
116 {
117 FrameMetadata::setData(metadata);
118
119 imageType = metadata.imageType;
120 width = metadata.width;
121 height = metadata.height;
122 channels = metadata.channels;
123 type = metadata.type;
124 step = metadata.step;
125 depth = metadata.depth;
126
127 setDataSize();
128 }
129
131 {
132 return width;
133 }
134
135 size_t getRowSize()
136 {
137 float multiple = 1;
138 switch (imageType)
139 {
141 multiple = 1;
142 break;
145 multiple = 2;
146 break;
149 multiple = 3;
150 break;
152 multiple = 1.5;
153 break;
156 multiple = 4;
157 break;
158 default:
159 auto msg = "Unknown image type<" + std::to_string(imageType) + ">";
160 throw AIPException(AIP_NOTIMPLEMENTED, msg);
161 }
162
163 auto elemSize = ImageMetadata::getElemSize(depth);
164
165 return static_cast<size_t>(width*multiple*elemSize);
166 }
167
169 {
170 return height;
171 }
172
173 int getType() { return type; }
174
175 size_t getStep() { return step; }
176
177 size_t getOffset(int offsetX, int offsetY)
178 {
179 auto elemSize = ImageMetadata::getElemSize(depth);
180
181 return (step*offsetY + (elemSize*offsetX*channels) );
182 }
183
184 int getChannels() { return channels; }
185
186 int getDepth() { return depth; }
187
189
190protected:
192 {
193 dataSize = height * step ;
194 }
195
196 void initData(int _width, int _height, ImageMetadata::ImageType _imageType, int _type, size_t _step, int _depth, MemType _memType = MemType::HOST)
197 {
198 imageType = _imageType;
199 width = _width;
200 height = _height;
201 type = _type;
202 step = _step;
203 depth = _depth;
204 setDataSize();
205
206 switch (imageType)
207 {
209 channels = 1;
210 break;
216 channels = 3;
217 break;
220 channels = 4;
221 break;
227 channels = 1;
228 break;
229 default:
230 auto msg = "Unknown image type<" + std::to_string(imageType) + ">";
231 throw AIPException(AIP_NOTIMPLEMENTED, msg);
232 }
233 }
234
235 // https://docs.opencv.org/4.1.1/d3/d63/classcv_1_1Mat.html
236 int width = NOT_SET_NUM;
237 int height = NOT_SET_NUM;
238 int channels = NOT_SET_NUM;
239 int type = NOT_SET_NUM;
240 size_t step = NOT_SET_NUM; // https://docs.opencv.org/4.1.1/d3/d63/classcv_1_1Mat.html#a51615ebf17a64c968df0bf49b4de6a3a
241 int depth = NOT_SET_NUM;
242
244};
Definition FrameMetadata.h:10
virtual void reset()
Definition FrameMetadata.h:88
size_t dataSize
Definition FrameMetadata.h:145
static size_t getPaddingLength(size_t length, size_t alignLength)
Definition FrameMetadata.h:12
void setData(FrameMetadata &metadata)
Definition FrameMetadata.h:132
MemType
Definition FrameMetadata.h:58
@ HOST
Definition FrameMetadata.h:59
FrameType
Definition FrameMetadata.h:29
@ RAW_IMAGE
Definition FrameMetadata.h:32
static size_t getElemSize(int depth)
Definition ImageMetadata.h:32
ImageType
Definition ImageMetadata.h:11
@ RGBA
Definition ImageMetadata.h:17
@ BAYERGB8
Definition ImageMetadata.h:26
@ YUV411_I
Definition ImageMetadata.h:18
@ BAYERRG8
Definition ImageMetadata.h:28
@ BAYERGR8
Definition ImageMetadata.h:27
@ BAYERBG10
Definition ImageMetadata.h:24
@ MONO
Definition ImageMetadata.h:13
@ YUYV
Definition ImageMetadata.h:22
@ BGR
Definition ImageMetadata.h:14
@ UYVY
Definition ImageMetadata.h:21
@ BAYERBG8
Definition ImageMetadata.h:25
@ BGRA
Definition ImageMetadata.h:15
@ RGB
Definition ImageMetadata.h:16
Definition RawImageMetadata.h:10
int depth
Definition RawImageMetadata.h:241
int width
Definition RawImageMetadata.h:236
void setData(RawImageMetadata &metadata)
Definition RawImageMetadata.h:115
size_t step
Definition RawImageMetadata.h:240
ImageMetadata::ImageType imageType
Definition RawImageMetadata.h:243
void initData(int _width, int _height, ImageMetadata::ImageType _imageType, int _type, size_t _step, int _depth, MemType _memType=MemType::HOST)
Definition RawImageMetadata.h:196
int getChannels()
Definition RawImageMetadata.h:184
size_t getRowSize()
Definition RawImageMetadata.h:135
int type
Definition RawImageMetadata.h:239
void setData(cv::Mat &img)
Definition RawImageMetadata.h:103
size_t getOffset(int offsetX, int offsetY)
Definition RawImageMetadata.h:177
RawImageMetadata(int _width, int _height, ImageMetadata::ImageType _imageType, int _type, size_t alignLength, int _depth, MemType _memType, bool computeStep=false)
Definition RawImageMetadata.h:36
ImageMetadata::ImageType getImageType()
Definition RawImageMetadata.h:188
RawImageMetadata(std::string _hint)
Definition RawImageMetadata.h:13
void reset()
Definition RawImageMetadata.h:86
size_t getStep()
Definition RawImageMetadata.h:175
RawImageMetadata(MemType _memType)
Definition RawImageMetadata.h:14
int getWidth()
Definition RawImageMetadata.h:130
RawImageMetadata()
Definition RawImageMetadata.h:12
int channels
Definition RawImageMetadata.h:238
int getHeight()
Definition RawImageMetadata.h:168
int getType()
Definition RawImageMetadata.h:173
void setDataSize()
Definition RawImageMetadata.h:191
int getDepth()
Definition RawImageMetadata.h:186
int height
Definition RawImageMetadata.h:237
bool isSet()
Definition RawImageMetadata.h:98
RawImageMetadata(int _width, int _height, int _channels, int _type, size_t _step, int _depth)
Definition RawImageMetadata.h:16