// Copyright 2016 The PDFium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef CORE_FXCODEC_GIF_GIF_DECODER_H_ #define CORE_FXCODEC_GIF_GIF_DECODER_H_ #include #include #include "core/fxcodec/gif/cfx_gif.h" #include "core/fxcodec/progressive_decoder_iface.h" #include "core/fxcrt/fx_coordinates.h" #include "third_party/base/span.h" #ifndef PDF_ENABLE_XFA_GIF #error "GIF must be enabled" #endif namespace fxcodec { class GifDecoder { public: enum class Status { kError, kSuccess, kUnfinished, }; class Delegate { public: virtual uint32_t GifCurrentPosition() const = 0; virtual bool GifInputRecordPositionBuf(uint32_t rcd_pos, const FX_RECT& img_rc, int32_t pal_num, CFX_GifPalette* pal_ptr, int32_t trans_index, bool interlace) = 0; virtual void GifReadScanline(int32_t row_num, pdfium::span row_buf) = 0; }; static std::unique_ptr StartDecode( Delegate* pDelegate); static Status ReadHeader(ProgressiveDecoderIface::Context* context, int* width, int* height, int* pal_num, CFX_GifPalette** pal_pp, int* bg_index); static std::pair LoadFrameInfo( ProgressiveDecoderIface::Context* context); static Status LoadFrame(ProgressiveDecoderIface::Context* context, size_t frame_num); static FX_FILESIZE GetAvailInput(ProgressiveDecoderIface::Context* context); static bool Input(ProgressiveDecoderIface::Context* context, RetainPtr codec_memory); GifDecoder() = delete; GifDecoder(const GifDecoder&) = delete; GifDecoder& operator=(const GifDecoder&) = delete; }; } // namespace fxcodec using GifDecoder = fxcodec::GifDecoder; #endif // CORE_FXCODEC_GIF_GIF_DECODER_H_