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
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
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)
constexpr fl::size size() const FL_NOEXCEPT
shared_ptr< T > make_shared(Args &&... args) FL_NOEXCEPT
expected< T, E > result
Alias for expected (Rust-style naming)