blob: e18e853ec3d8ea7491b8483efb8832d507e22f6e [file] [log] [blame]
// Copyright 2025 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_PNG_PNG_DECODER_DELEGATE_H_
#define CORE_FXCODEC_PNG_PNG_DECODER_DELEGATE_H_
#include <stdint.h>
#include "core/fxcrt/span.h"
namespace fxcodec {
// Abstract interface used by `libpng_png_decoder.h` and `skia_png_decoder.h`.
class PngDecoderDelegate {
public:
// Called by `PngDecoder` after decoding the image header with
// `width` and `height` that specify image dimensions in pixels
//
// Implementation should:
//
// * Return `true` upon success (and `false` otherwise)
// * Set `*gamma` to the target gamma to decode with
// * TODO(crbug.com/355630556): Add out parameter for desired alpha-premul.
virtual bool PngReadHeader(int width, int height, double* gamma) = 0;
// Called by `PngDecoder` to ask where to write decoded BGRA/8 pixels.
// Implementation should return a span to the buffer where decoder can write
// decoded pixels from the given `line`.
//
// `PngDecoder` guarantees that `0 <= line && line < height`
// (`height` that was earlier passed to `PngReadHeader`).
virtual pdfium::span<uint8_t> PngAskScanlineBuf(int line) = 0;
// Called by `PngDecoder` to ask where to write decoded BGRA/8 pixels.
// Implementation should return a span to the buffer where decoder can write
// all the decoded pixels (i.e. covering all rows/lines of the image).
virtual pdfium::span<uint8_t> PngAskImageBuf() = 0;
// Called by `PngDecoder` to communicate that all pixels have been decoded.
virtual void PngFinishedDecoding() = 0;
};
} // namespace fxcodec
#endif // CORE_FXCODEC_PNG_PNG_DECODER_DELEGATE_H_