#include "src/encode/SkJpegEncoderImpl.h"
#include "include/core/SkAlphaType.h"
#include "include/core/SkBitmap.h"
#include "include/core/SkColorType.h"
#include "include/core/SkData.h"
#include "include/core/SkImageInfo.h"
#include "include/core/SkPixmap.h"
#include "include/core/SkRefCnt.h"
#include "include/core/SkStream.h"
#include "include/core/SkYUVAInfo.h"
#include "include/core/SkYUVAPixmaps.h"
#include "include/encode/SkEncoder.h"
#include "include/encode/SkJpegEncoder.h"
#include "include/private/base/SkAssert.h"
#include "include/private/base/SkNoncopyable.h"
#include "include/private/base/SkTemplates.h"
#include "src/base/SkMSAN.h"
#include "src/codec/SkJpegConstants.h"
#include "src/codec/SkJpegPriv.h"
#include "src/encode/SkImageEncoderFns.h"
#include "src/encode/SkImageEncoderPriv.h"
#include "src/encode/SkJPEGWriteUtility.h"
#include "src/image/SkImage_Base.h"
#include <csetjmp>
#include <cstdint>
#include <cstring>
#include <memory>
#include <utility>
class GrDirectContext;
class SkColorSpace;
class SkImage;
extern "C" {
#include "jpeglib.h"
}
class SkJpegEncoderMgr final : SkNoncopyable { … };
bool SkJpegEncoderMgr::initializeRGB(const SkImageInfo& srcInfo,
const SkJpegEncoder::Options& options,
const SkJpegMetadataEncoder::SegmentList& metadataSegments) { … }
static void yuva_copy_row(const SkYUVAPixmaps& src, int row, uint8_t* dst) { … }
bool SkJpegEncoderMgr::initializeYUV(const SkYUVAPixmapInfo& srcInfo,
const SkJpegEncoder::Options& options,
const SkJpegMetadataEncoder::SegmentList& metadataSegments) { … }
void SkJpegEncoderMgr::initializeCommon(
const SkJpegEncoder::Options& options,
const SkJpegMetadataEncoder::SegmentList& metadataSegments) { … }
std::unique_ptr<SkEncoder> SkJpegEncoderImpl::MakeYUV(
SkWStream* dst,
const SkYUVAPixmaps& srcYUVA,
const SkColorSpace* srcYUVAColorSpace,
const SkJpegEncoder::Options& options,
const SkJpegMetadataEncoder::SegmentList& metadataSegments) { … }
std::unique_ptr<SkEncoder> SkJpegEncoderImpl::MakeRGB(
SkWStream* dst,
const SkPixmap& src,
const SkJpegEncoder::Options& options,
const SkJpegMetadataEncoder::SegmentList& metadataSegments) { … }
SkJpegEncoderImpl::SkJpegEncoderImpl(std::unique_ptr<SkJpegEncoderMgr> encoderMgr,
const SkPixmap& src)
: … { … }
SkJpegEncoderImpl::SkJpegEncoderImpl(std::unique_ptr<SkJpegEncoderMgr> encoderMgr,
const SkYUVAPixmaps& src)
: … { … }
SkJpegEncoderImpl::~SkJpegEncoderImpl() { … }
bool SkJpegEncoderImpl::onEncodeRows(int numRows) { … }
namespace SkJpegEncoder {
bool Encode(SkWStream* dst, const SkPixmap& src, const Options& options) { … }
bool Encode(SkWStream* dst,
const SkYUVAPixmaps& src,
const SkColorSpace* srcColorSpace,
const Options& options) { … }
sk_sp<SkData> Encode(GrDirectContext* ctx, const SkImage* img, const Options& options) { … }
std::unique_ptr<SkEncoder> Make(SkWStream* dst, const SkPixmap& src, const Options& options) { … }
std::unique_ptr<SkEncoder> Make(SkWStream* dst,
const SkYUVAPixmaps& src,
const SkColorSpace* srcColorSpace,
const Options& options) { … }
}
namespace SkJpegMetadataEncoder {
void AppendICC(SegmentList& segmentList,
const SkJpegEncoder::Options& options,
const SkColorSpace* colorSpace) { … }
void AppendXMPStandard(SegmentList& segmentList, const SkData* xmpMetadata) { … }
}