FastLED 3.9.15
Loading...
Searching...
No Matches

◆ decode() [2/3]

bool fl::Jpeg::decode ( const JpegConfig & config,
fl::span< const fl::u8 > data,
Frame * frame,
fl::string * error_message = nullptr )
static

Definition at line 296 of file jpeg.cpp.hpp.

296 {
297 if (!frame) {
298 if (error_message) {
299 *error_message = "Frame pointer is null";
300 }
301 return false;
302 }
303
304 if (!frame->isFromCodec() || frame->getWidth() == 0 || frame->getHeight() == 0) {
305 if (error_message) {
306 *error_message = "Target frame must be created with proper dimensions for in-place decoding";
307 }
308 return false;
309 }
310
311 auto decoder = createDecoder(config);
312 auto stream = fl::make_shared<fl::memorybuf>(data.size());
313 stream->write(data);
314
315 if (!decoder->begin(stream)) {
316 if (error_message) {
317 decoder->hasError(error_message);
318 }
319 return false;
320 }
321
322 DecodeResult result = decoder->decode();
324 if (error_message) {
325 decoder->hasError(error_message);
326 }
327 return false;
328 }
329
330 Frame decoded = decoder->getCurrentFrame();
331
332 if (frame->getWidth() != decoded.getWidth() || frame->getHeight() != decoded.getHeight()) {
333 if (error_message) {
334 *error_message = "Target frame dimensions do not match decoded image dimensions";
335 }
336 return false;
337 }
338
339 frame->copy(decoded);
340 return true;
341}
static JpegDecoderPtr createDecoder(const JpegConfig &config)
Definition jpeg.cpp.hpp:372
constexpr fl::size size() const FL_NOEXCEPT
Definition span.h:458
shared_ptr< T > make_shared(Args &&... args) FL_NOEXCEPT
Definition shared_ptr.h:414
expected< T, E > result
Alias for expected (Rust-style naming)
Definition result.h:31
DecodeResult
Definition idecoder.h:18

References fl::Frame::copy(), createDecoder(), fl::Frame::getHeight(), fl::Frame::getWidth(), fl::Frame::isFromCodec(), fl::make_shared(), fl::span< T, Extent >::size(), and fl::Success.

Referenced by decode(), fl::FileSystem::loadJpeg(), and CodecProcessor::processJpeg().

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