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

Method transpose8

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

Source from the content-addressed store, hash-verified

178// ----------------------------------------------------------------------------
179
180bool SPITransposer::transpose8(const fl::optional<LaneData> lanes[8],
181 fl::span<u8> output,
182 const char** error) {
183 // Validate output buffer size (must be divisible by 8)
184 if (output.size() % 8 != 0) {
185 if (error) {
186 *error = "Output buffer size must be divisible by 8";
187 }
188 return false;
189 }
190
191 // Calculate max lane size from output buffer
192 const size_t max_size = output.size() / 8;
193
194 // Handle empty case
195 if (max_size == 0) {
196 if (error) {
197 *error = nullptr; // No error, just empty
198 }
199 return true;
200 }
201
202 // Determine default padding byte from first available lane
203 u8 default_padding = 0x00;
204 for (size_t i = 0; i < 8; i++) {
205 if (lanes[i].has_value() && !lanes[i]->padding_frame.empty()) {
206 default_padding = lanes[i]->padding_frame[0];
207 break;
208 }
209 }
210
211 // Gather all bytes from each lane into temporary buffers
212 fl::vector<u8> lane_buffers[8];
213 const u8* lane_ptrs[8];
214
215 for (size_t lane = 0; lane < 8; lane++) {
216 lane_buffers[lane].resize(max_size);
217 lane_ptrs[lane] = lane_buffers[lane].data();
218
219 for (size_t byte_idx = 0; byte_idx < max_size; byte_idx++) {
220 lane_buffers[lane][byte_idx] = lanes[lane].has_value() ?
221 getLaneByte(*lanes[lane], byte_idx, max_size) : default_padding;
222 }
223 }
224
225 // Perform transposition using ISR-safe primitive
226 transpose_8lane_inline(lane_ptrs, output.data(), max_size);
227
228 if (error) {
229 *error = nullptr; // Success, no error
230 }
231 return true;
232}
233
234// interleave_byte_8way removed - now uses transpose_8lane_inline() primitive
235

Callers

nothing calls this directly

Calls 6

transpose_8lane_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