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

◆ detect_data_modality() [1/2]

DataModality MayaFlux::Kakshya::detect_data_modality ( const std::vector< DataDimension > &  dimensions)

Detects data modality from dimension information.

Parameters
dimensionsVector of data dimensions with role information
Returns
Detected DataModality type

Consolidates modality detection logic that was duplicated across analyzers. Uses dimension roles and count to determine appropriate processing approach.

Definition at line 123 of file DataUtils.cpp.

124{
125 if (dimensions.empty()) {
126 return DataModality::UNKNOWN;
127 }
128
129 size_t time_dims = 0, spatial_dims = 0, channel_dims = 0, frequency_dims = 0, custom_dims = 0;
130 size_t total_spatial_elements = 1;
131 size_t total_channels = 0;
132
133 for (const auto& dim : dimensions) {
134 if (dim.grouping) {
135 switch (dim.role) {
136 case DataDimension::Role::POSITION:
137 return DataModality::VERTEX_POSITIONS_3D;
138 case DataDimension::Role::NORMAL:
139 return DataModality::VERTEX_NORMALS_3D;
140 case DataDimension::Role::TANGENT:
141 case DataDimension::Role::BITANGENT:
142 return DataModality::VERTEX_TANGENTS_3D;
143 case DataDimension::Role::UV:
144 return DataModality::TEXTURE_COORDS_2D;
145 case DataDimension::Role::COLOR:
146 if (dim.grouping->count == 3)
147 return DataModality::VERTEX_COLORS_RGB;
148 if (dim.grouping->count == 4)
149 return DataModality::VERTEX_COLORS_RGBA;
150 break;
151 default:
152 if (dim.grouping->count == 16)
153 return DataModality::TRANSFORMATION_MATRIX;
154 break;
155 }
156 }
157 }
158
159 for (const auto& dim : dimensions) {
160 switch (dim.role) {
161 case DataDimension::Role::TIME:
162 time_dims++;
163 break;
164 case DataDimension::Role::SPATIAL_X:
165 case DataDimension::Role::SPATIAL_Y:
166 case DataDimension::Role::SPATIAL_Z:
167 spatial_dims++;
168 total_spatial_elements *= dim.size;
169 break;
170 case DataDimension::Role::CHANNEL:
171 channel_dims++;
172 total_channels += dim.size;
173 break;
174 case DataDimension::Role::FREQUENCY:
175 frequency_dims++;
176 break;
177 case DataDimension::Role::CUSTOM:
178 default:
179 custom_dims++;
180 break;
181 }
182 }
183
184 if (time_dims == 1 && spatial_dims == 0 && frequency_dims == 0) {
185 if (channel_dims == 0) {
186 return DataModality::AUDIO_1D;
187 } else if (channel_dims == 1) {
188 return (total_channels <= 1) ? DataModality::AUDIO_1D : DataModality::AUDIO_MULTICHANNEL;
189 } else {
190 return DataModality::AUDIO_MULTICHANNEL;
191 }
192 }
193
194 if (time_dims >= 1 && frequency_dims >= 1) {
195 if (spatial_dims == 0 && channel_dims <= 1) {
196 return DataModality::SPECTRAL_2D;
197 }
198 return DataModality::TENSOR_ND;
199 }
200
201 if (spatial_dims >= 2 && time_dims == 0) {
202 if (spatial_dims == 2) {
203 if (channel_dims == 0) {
204 return DataModality::IMAGE_2D;
205 } else if (channel_dims == 1 && total_channels >= 3) {
206 return DataModality::IMAGE_COLOR;
207 } else {
208 return DataModality::IMAGE_2D;
209 }
210 } else if (spatial_dims == 3) {
211 return DataModality::VOLUMETRIC_3D;
212 }
213 }
214
215 if (time_dims >= 1 && spatial_dims >= 2) {
216 if (spatial_dims == 2) {
217 if (channel_dims == 0 || (channel_dims == 1 && total_channels <= 1)) {
218 return DataModality::VIDEO_GRAYSCALE;
219 } else {
220 return DataModality::VIDEO_COLOR;
221 }
222 }
223 return DataModality::TENSOR_ND;
224 }
225
226 if (spatial_dims == 2 && time_dims == 0 && channel_dims >= 1) {
227 if (total_spatial_elements >= 64 && total_channels >= 1) {
228 return DataModality::TEXTURE_2D;
229 }
230 }
231
232 return DataModality::TENSOR_ND;
233}

References AUDIO_1D, AUDIO_MULTICHANNEL, MayaFlux::Kakshya::DataDimension::BITANGENT, MayaFlux::Kakshya::DataDimension::CHANNEL, MayaFlux::Kakshya::DataDimension::COLOR, MayaFlux::Kakshya::DataDimension::CUSTOM, MayaFlux::Kakshya::DataDimension::FREQUENCY, IMAGE_2D, IMAGE_COLOR, MayaFlux::Kakshya::DataDimension::NORMAL, MayaFlux::Kakshya::DataDimension::POSITION, MayaFlux::Kakshya::DataDimension::SPATIAL_X, MayaFlux::Kakshya::DataDimension::SPATIAL_Y, MayaFlux::Kakshya::DataDimension::SPATIAL_Z, SPECTRAL_2D, MayaFlux::Kakshya::DataDimension::TANGENT, TENSOR_ND, TEXTURE_2D, TEXTURE_COORDS_2D, MayaFlux::Kakshya::DataDimension::TIME, TRANSFORMATION_MATRIX, UNKNOWN, MayaFlux::Kakshya::DataDimension::UV, VERTEX_COLORS_RGB, VERTEX_COLORS_RGBA, VERTEX_NORMALS_3D, VERTEX_POSITIONS_3D, VERTEX_TANGENTS_3D, VIDEO_COLOR, VIDEO_GRAYSCALE, and VOLUMETRIC_3D.

Referenced by detect_data_modality(), MayaFlux::Yantra::infer_from_container(), MayaFlux::Yantra::infer_from_data_variant(), and MayaFlux::Yantra::infer_from_data_variant_vector().

+ Here is the caller graph for this function: