Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | List of all members
SkJpegEncoderImpl Class Reference

#include <SkJpegEncoderImpl.h>

Inheritance diagram for SkJpegEncoderImpl:
SkEncoder SkNoncopyable

Public Member Functions

 SkJpegEncoderImpl (std::unique_ptr< SkJpegEncoderMgr >, const SkPixmap &src)
 
 SkJpegEncoderImpl (std::unique_ptr< SkJpegEncoderMgr >, const SkYUVAPixmaps *srcYUVA)
 
 ~SkJpegEncoderImpl () override
 
- Public Member Functions inherited from SkEncoder
bool encodeRows (int numRows)
 
virtual ~SkEncoder ()
 

Protected Member Functions

bool onEncodeRows (int numRows) override
 
- Protected Member Functions inherited from SkEncoder
 SkEncoder (const SkPixmap &src, size_t storageBytes)
 

Additional Inherited Members

- Protected Attributes inherited from SkEncoder
const SkPixmapfSrc
 
int fCurrRow
 
skia_private::AutoTMalloc< uint8_t > fStorage
 

Detailed Description

Definition at line 19 of file SkJpegEncoderImpl.h.

Constructor & Destructor Documentation

◆ SkJpegEncoderImpl() [1/2]

SkJpegEncoderImpl::SkJpegEncoderImpl ( std::unique_ptr< SkJpegEncoderMgr encoderMgr,
const SkPixmap src 
)

Definition at line 332 of file SkJpegEncoderImpl.cpp.

334 : SkEncoder(src,
335 encoderMgr->proc() ? encoderMgr->cinfo()->input_components * src.width() : 0)
336 , fEncoderMgr(std::move(encoderMgr)) {}
Definition ref_ptr.h:256

◆ SkJpegEncoderImpl() [2/2]

SkJpegEncoderImpl::SkJpegEncoderImpl ( std::unique_ptr< SkJpegEncoderMgr encoderMgr,
const SkYUVAPixmaps srcYUVA 
)

Definition at line 338 of file SkJpegEncoderImpl.cpp.

340 : SkEncoder(src->plane(0), encoderMgr->cinfo()->input_components * src->yuvaInfo().width())
341 , fEncoderMgr(std::move(encoderMgr))
342 , fSrcYUVA(src) {}

◆ ~SkJpegEncoderImpl()

SkJpegEncoderImpl::~SkJpegEncoderImpl ( )
override

Definition at line 344 of file SkJpegEncoderImpl.cpp.

344{}

Member Function Documentation

◆ onEncodeRows()

bool SkJpegEncoderImpl::onEncodeRows ( int  numRows)
overrideprotectedvirtual

Implements SkEncoder.

Definition at line 346 of file SkJpegEncoderImpl.cpp.

346 {
347 skjpeg_error_mgr::AutoPushJmpBuf jmp(fEncoderMgr->errorMgr());
348 if (setjmp(jmp)) {
349 return false;
350 }
351
352 if (fSrcYUVA) {
353 // TODO(ccameron): Consider using jpeg_write_raw_data, to avoid having to re-pack the data.
354 for (int i = 0; i < numRows; i++) {
355 yuva_copy_row(fSrcYUVA, fCurrRow + i, fStorage.get());
356 JSAMPLE* jpegSrcRow = fStorage.get();
357 jpeg_write_scanlines(fEncoderMgr->cinfo(), &jpegSrcRow, 1);
358 }
359 } else {
360 const size_t srcBytes = SkColorTypeBytesPerPixel(fSrc.colorType()) * fSrc.width();
361 const size_t jpegSrcBytes = fEncoderMgr->cinfo()->input_components * fSrc.width();
362 const void* srcRow = fSrc.addr(0, fCurrRow);
363 for (int i = 0; i < numRows; i++) {
364 JSAMPLE* jpegSrcRow = (JSAMPLE*)(const_cast<void*>(srcRow));
365 if (fEncoderMgr->proc()) {
366 sk_msan_assert_initialized(srcRow, SkTAddOffset<const void>(srcRow, srcBytes));
367 fEncoderMgr->proc()((char*)fStorage.get(),
368 (const char*)srcRow,
369 fSrc.width(),
370 fEncoderMgr->cinfo()->input_components);
371 jpegSrcRow = fStorage.get();
373 SkTAddOffset<const void>(jpegSrcRow, jpegSrcBytes));
374 } else {
375 // Same as above, but this repetition allows determining whether a
376 // proc was used when msan asserts.
378 SkTAddOffset<const void>(jpegSrcRow, jpegSrcBytes));
379 }
380
381 jpeg_write_scanlines(fEncoderMgr->cinfo(), &jpegSrcRow, 1);
382 srcRow = SkTAddOffset<const void>(srcRow, fSrc.rowBytes());
383 }
384 }
385
386 fCurrRow += numRows;
387 if (fCurrRow == fSrc.height()) {
388 jpeg_finish_compress(fEncoderMgr->cinfo());
389 }
390
391 return true;
392}
SK_API int SkColorTypeBytesPerPixel(SkColorType ct)
static void yuva_copy_row(const SkYUVAPixmaps *src, int row, uint8_t *dst)
static void sk_msan_assert_initialized(const void *begin, const void *end)
Definition SkMSAN.h:24
skia_private::AutoTMalloc< uint8_t > fStorage
Definition SkEncoder.h:60
int fCurrRow
Definition SkEncoder.h:59
const SkPixmap & fSrc
Definition SkEncoder.h:58
size_t rowBytes() const
Definition SkPixmap.h:145
int width() const
Definition SkPixmap.h:160
SkColorType colorType() const
Definition SkPixmap.h:173
const void * addr() const
Definition SkPixmap.h:153
int height() const
Definition SkPixmap.h:166

The documentation for this class was generated from the following files: