blob: c8c8e83d6529c4f99e4df2e7cb586a4175e5efaa [file]
// Copyright 2026 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CORE_FXCODEC_JPEG_RUST_JPEG_SCANLINE_DECODER_H_
#define CORE_FXCODEC_JPEG_RUST_JPEG_SCANLINE_DECODER_H_
#include <stdint.h>
#include <memory>
#include <optional>
#include "core/fxcodec/jpeg/jpegmodule.h"
#include "core/fxcodec/scanlinedecoder.h"
#include "core/fxcrt/data_vector.h"
#include "core/fxcrt/span.h"
namespace fxcodec {
class RustJpegScanlineDecoder final : public ScanlineDecoder {
public:
static std::unique_ptr<ScanlineDecoder> Create(
pdfium::span<const uint8_t> src_span,
uint32_t width,
uint32_t height,
int num_components,
bool color_transform,
uint32_t scale_denom);
static std::optional<JpegModule::ImageInfo> LoadInfo(
pdfium::span<const uint8_t> src_span);
RustJpegScanlineDecoder();
~RustJpegScanlineDecoder() override;
// ScanlineDecoder:
[[nodiscard]] bool Rewind() override;
pdfium::span<uint8_t> GetNextLine() override;
uint32_t GetSrcOffset() override;
private:
bool CreateImpl(pdfium::span<const uint8_t> src_span,
uint32_t width,
uint32_t height,
int num_components,
bool color_transform,
uint32_t scale_denom);
void CalcPitch();
DataVector<uint8_t> decoded_image_;
uint32_t next_row_ = 0;
};
} // namespace fxcodec
#endif // CORE_FXCODEC_JPEG_RUST_JPEG_SCANLINE_DECODER_H_