MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ create_dimensions()

std::vector< DataDimension > MayaFlux::Kakshya::DataDimension::create_dimensions ( DataModality  modality,
const std::vector< uint64_t > &  shape,
MemoryLayout  layout = MemoryLayout::ROW_MAJOR 
)
static

Create dimension descriptors for a data modality.

Parameters
modalityTarget data modality
shapeDimensional sizes
layoutMemory layout strategy
Returns
Vector of DataDimension objects

Definition at line 127 of file NDData.cpp.

131{
132 std::vector<DataDimension> dims;
133 auto strides = calculate_strides(shape, layout);
134
135 switch (modality) {
137 if (shape.size() != 1) {
138 error<std::invalid_argument>(
141 std::source_location::current(),
142 "AUDIO_1D requires 1D shape");
143 }
144 dims.push_back(DataDimension::time(shape[0]));
145 break;
146
148 if (shape.size() != 2) {
149 error<std::invalid_argument>(
152 std::source_location::current(),
153 "AUDIO_MULTICHANNEL requires 2D shape [samples, channels]");
154 }
155 dims.push_back(DataDimension::time(shape[0]));
156 dims.push_back(DataDimension::channel(shape[1], strides[1]));
157 break;
158
160 if (shape.size() != 2) {
161 error<std::invalid_argument>(
164 std::source_location::current(),
165 "IMAGE_2D requires 2D shape [height, width]");
166 }
167 dims.push_back(DataDimension::spatial(shape[0], 'y', strides[0]));
168 dims.push_back(DataDimension::spatial(shape[1], 'x', strides[1]));
169 break;
170
172 if (shape.size() != 3) {
173 error<std::invalid_argument>(
176 std::source_location::current(),
177 "IMAGE_COLOR requires 3D shape [height, width, channels]");
178 }
179 dims.push_back(DataDimension::spatial(shape[0], 'y', strides[0]));
180 dims.push_back(DataDimension::spatial(shape[1], 'x', strides[1]));
181 dims.push_back(DataDimension::channel(shape[2], strides[2]));
182 break;
183
185 if (shape.size() != 4) {
186 error<std::invalid_argument>(
189 std::source_location::current(),
190 "IMAGE_COLOR_ARRAY requires 4D shape [frames, height, width, channels]");
191 }
192 dims.push_back(DataDimension::time(shape[0], "index"));
193 dims.push_back(DataDimension::spatial(shape[1], 'y', strides[1]));
194 dims.push_back(DataDimension::spatial(shape[2], 'x', strides[2]));
195 dims.push_back(DataDimension::channel(shape[3], strides[3]));
196 break;
197
199 if (shape.size() != 3) {
200 error<std::invalid_argument>(
203 std::source_location::current(),
204 "DEPTH_MAP requires 3D shape [height, width, components]");
205 }
206 dims.push_back(DataDimension::spatial(shape[0], 'y', strides[0]));
207 dims.push_back(DataDimension::spatial(shape[1], 'x', strides[1]));
208 dims.push_back(DataDimension::depth(shape[2], strides[2]));
209 break;
210
212 if (shape.size() != 2) {
213 error<std::invalid_argument>(
216 std::source_location::current(),
217 "SPECTRAL_2D requires 2D shape [time_windows, frequency_bins]");
218 }
219 dims.push_back(DataDimension::time(shape[0], "time_windows"));
220 dims.push_back(DataDimension::frequency(shape[1]));
221 dims[1].stride = strides[1];
222 break;
223
225 if (shape.size() != 3) {
226 error<std::invalid_argument>(
229 std::source_location::current(),
230 "VOLUMETRIC_3D requires 3D shape [x, y, z]");
231 }
232 dims.push_back(DataDimension::spatial(shape[0], 'x', strides[0]));
233 dims.push_back(DataDimension::spatial(shape[1], 'y', strides[1]));
234 dims.push_back(DataDimension::spatial(shape[2], 'z', strides[2]));
235 break;
236
238 if (shape.size() != 3) {
239 error<std::invalid_argument>(
242 std::source_location::current(),
243 "VIDEO_GRAYSCALE requires 3D shape [frames, height, width]");
244 }
245 dims.push_back(DataDimension::time(shape[0], "frames"));
246 dims.push_back(DataDimension::spatial(shape[1], 'y', strides[1]));
247 dims.push_back(DataDimension::spatial(shape[2], 'x', strides[2]));
248 break;
249
251 if (shape.size() != 4) {
252 error<std::invalid_argument>(
255 std::source_location::current(),
256 "VIDEO_COLOR requires 4D shape [frames, height, width, channels]");
257 }
258 dims.push_back(DataDimension::time(shape[0], "frames"));
259 dims.push_back(DataDimension::spatial(shape[1], 'y', strides[1]));
260 dims.push_back(DataDimension::spatial(shape[2], 'x', strides[2]));
261 dims.push_back(DataDimension::channel(shape[3], strides[3]));
262 break;
263
265 if (shape.size() != 4) {
266 error<std::invalid_argument>(
269 std::source_location::current(),
270 "VIDEO_DEPTH requires 4D shape [frames, height, width, components]");
271 }
272 dims.push_back(DataDimension::time(shape[0], "frames"));
273 dims.push_back(DataDimension::spatial(shape[1], 'y', strides[1]));
274 dims.push_back(DataDimension::spatial(shape[2], 'x', strides[2]));
275 dims.push_back(DataDimension::depth(shape[3], strides[3]));
276 break;
277
278 default:
279 error<std::invalid_argument>(
282 std::source_location::current(),
283 "Unsupported modality for dimension creation: {}", modality_to_string(modality));
284 }
285
286 return dims;
287}
@ Runtime
General runtime operations (default fallback)
@ Kakshya
Containers[Signalsource, Stream, File], Regions, DataProcessors.
@ DEPTH_MAP
[height, width, components] - range/disparity image
@ AUDIO_MULTICHANNEL
Multi-channel audio.
@ SPECTRAL_2D
2D spectral data (time + frequency)
@ VIDEO_DEPTH
[frames, height, width, components] - streaming range data
@ IMAGE_COLOR_ARRAY
4D (idx + 2D + color)
@ VOLUMETRIC_3D
3D volumetric data
@ VIDEO_GRAYSCALE
3D video (time + 2D grayscale)
@ VIDEO_COLOR
4D video (time + 2D + color)
@ IMAGE_COLOR
2D RGB/RGBA image
@ IMAGE_2D
2D image (grayscale or single channel)
std::string_view modality_to_string(DataModality modality)
Convert DataModality enum to string representation.
Definition NDData.cpp:102
static DataDimension spatial(uint64_t size, char axis, uint64_t stride=1, std::string name="spatial")
Convenience constructor for a spatial dimension.
Definition NDData.cpp:37
static DataDimension frequency(uint64_t bins, std::string name="frequency")
Convenience constructor for a frequency dimension.
Definition NDData.cpp:32
static DataDimension time(uint64_t samples, std::string name="time")
Convenience constructor for a temporal (time) dimension.
Definition NDData.cpp:17
static std::vector< uint64_t > calculate_strides(const std::vector< uint64_t > &shape, MemoryLayout layout)
Calculate memory strides based on shape and layout.
Definition NDData.cpp:289
static DataDimension depth(uint64_t count=1, uint64_t stride=1)
Convenience constructor for a depth dimension.
Definition NDData.cpp:27
static DataDimension channel(uint64_t count, uint64_t stride=1)
Convenience constructor for a channel dimension.
Definition NDData.cpp:22

References MayaFlux::Kakshya::AUDIO_1D, MayaFlux::Kakshya::AUDIO_MULTICHANNEL, calculate_strides(), channel(), depth(), MayaFlux::Kakshya::DEPTH_MAP, frequency(), MayaFlux::Kakshya::IMAGE_2D, MayaFlux::Kakshya::IMAGE_COLOR, MayaFlux::Kakshya::IMAGE_COLOR_ARRAY, MayaFlux::Journal::Kakshya, MayaFlux::Kakshya::modality_to_string(), MayaFlux::Journal::Runtime, spatial(), MayaFlux::Kakshya::SPECTRAL_2D, time(), MayaFlux::Kakshya::VIDEO_COLOR, MayaFlux::Kakshya::VIDEO_DEPTH, MayaFlux::Kakshya::VIDEO_GRAYSCALE, and MayaFlux::Kakshya::VOLUMETRIC_3D.

Referenced by MayaFlux::Yantra::infer_from_region(), MayaFlux::Yantra::infer_from_region_group(), MayaFlux::Kakshya::SoundStreamContainer::setup_dimensions(), MayaFlux::Kakshya::TextureContainer::setup_dimensions(), MayaFlux::Kakshya::VideoStreamContainer::setup_dimensions(), and MayaFlux::Kakshya::WindowContainer::setup_dimensions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: