MCPcopy Create free account
hub / github.com/FastLED/FastLED / transpose16

Method transpose16

src/fl/math/transposition.cpp.hpp:240–292  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

238// ----------------------------------------------------------------------------
239
240bool SPITransposer::transpose16(const fl::optional<LaneData> lanes[16],
241 fl::span<u8> output,
242 const char** error) {
243 // Validate output buffer size (must be divisible by 16)
244 if (output.size() % 16 != 0) {
245 if (error) {
246 *error = "Output buffer size must be divisible by 16";
247 }
248 return false;
249 }
250
251 // Calculate max lane size from output buffer
252 const size_t max_size = output.size() / 16;
253
254 // Handle empty case
255 if (max_size == 0) {
256 if (error) {
257 *error = nullptr; // No error, just empty
258 }
259 return true;
260 }
261
262 // Determine default padding byte from first available lane
263 u8 default_padding = 0x00;
264 for (size_t i = 0; i < 16; i++) {
265 if (lanes[i].has_value() && !lanes[i]->padding_frame.empty()) {
266 default_padding = lanes[i]->padding_frame[0];
267 break;
268 }
269 }
270
271 // Gather all bytes from each lane into temporary buffers
272 fl::vector<u8> lane_buffers[16];
273 const u8* lane_ptrs[16];
274
275 for (size_t lane = 0; lane < 16; lane++) {
276 lane_buffers[lane].resize(max_size);
277 lane_ptrs[lane] = lane_buffers[lane].data();
278
279 for (size_t byte_idx = 0; byte_idx < max_size; byte_idx++) {
280 lane_buffers[lane][byte_idx] = lanes[lane].has_value() ?
281 getLaneByte(*lanes[lane], byte_idx, max_size) : default_padding;
282 }
283 }
284
285 // Perform transposition using ISR-safe primitive
286 transpose_16lane_inline(lane_ptrs, output.data(), max_size);
287
288 if (error) {
289 *error = nullptr; // Success, no error
290 }
291 return true;
292}
293
294// interleave_byte_16way removed - now uses transpose_16lane_inline() primitive
295

Callers

nothing calls this directly

Calls 6

transpose_16lane_inlineFunction · 0.85
sizeMethod · 0.45
has_valueMethod · 0.45
emptyMethod · 0.45
resizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected