Index: src/pdf/SkPDFBitmap.cpp |
diff --git a/src/pdf/SkPDFBitmap.cpp b/src/pdf/SkPDFBitmap.cpp |
index 5e617decf4feb749d510975020fa2836bd64b6ec..24f5c6a00fc0d6a93311299d86ea8727dd1d1b3a 100644 |
--- a/src/pdf/SkPDFBitmap.cpp |
+++ b/src/pdf/SkPDFBitmap.cpp |
@@ -382,7 +382,7 @@ namespace { |
// This SkPDFObject only outputs the alpha layer of the given bitmap. |
class PDFAlphaBitmap final : public SkPDFObject { |
public: |
- PDFAlphaBitmap(const SkImage* image) : fImage(SkRef(image)) { SkASSERT(image); } |
+ PDFAlphaBitmap(sk_sp<SkImage> image) : fImage(std::move(image)) { SkASSERT(fImage); } |
void emitObject(SkWStream* stream, |
const SkPDFObjNumMap& objNumMap, |
const SkPDFSubstituteMap& subs) const override { |
@@ -392,7 +392,7 @@ public: |
void drop() override { fImage = nullptr; } |
private: |
- sk_sp<const SkImage> fImage; |
+ sk_sp<SkImage> fImage; |
}; |
} // namespace |
@@ -418,11 +418,11 @@ public: |
} |
} |
void drop() override { fImage = nullptr; fSMask = nullptr; } |
- PDFDefaultBitmap(const SkImage* image, SkPDFObject* smask) |
- : fImage(SkRef(image)), fSMask(smask) { SkASSERT(fImage); } |
+ PDFDefaultBitmap(sk_sp<SkImage> image, sk_sp<SkPDFObject> smask) |
+ : fImage(std::move(image)), fSMask(std::move(smask)) { SkASSERT(fImage); } |
private: |
- sk_sp<const SkImage> fImage; |
+ sk_sp<SkImage> fImage; |
sk_sp<SkPDFObject> fSMask; |
}; |
} // namespace |
@@ -474,8 +474,9 @@ void PDFJpegBitmap::emitObject(SkWStream* stream, |
//////////////////////////////////////////////////////////////////////////////// |
-SkPDFObject* SkPDFCreateBitmapObject(const SkImage* image, |
- SkPixelSerializer* pixelSerializer) { |
+sk_sp<SkPDFObject> SkPDFCreateBitmapObject(sk_sp<SkImage> image, |
+ SkPixelSerializer* pixelSerializer) { |
+ SkASSERT(image); |
sk_sp<SkData> data(image->refEncoded()); |
SkJFIFInfo info; |
if (data && SkIsJFIF(data.get(), &info) && |
@@ -490,28 +491,30 @@ SkPDFObject* SkPDFCreateBitmapObject(const SkImage* image, |
#ifdef SK_PDF_IMAGE_STATS |
gJpegImageObjects.fetch_add(1); |
#endif |
- return new PDFJpegBitmap(info.fSize, data.get(), yuv); |
+ return sk_make_sp<PDFJpegBitmap>(info.fSize, data.get(), yuv); |
} |
} |
if (pixelSerializer) { |
SkBitmap bm; |
SkAutoPixmapUnlock apu; |
- if (as_IB(image)->getROPixels(&bm) && bm.requestLock(&apu)) { |
+ if (as_IB(image.get())->getROPixels(&bm) && bm.requestLock(&apu)) { |
data.reset(pixelSerializer->encode(apu.pixmap())); |
if (data && SkIsJFIF(data.get(), &info)) { |
bool yuv = info.fType == SkJFIFInfo::kYCbCr; |
if (info.fSize == image->dimensions()) { // Sanity check. |
- return new PDFJpegBitmap(info.fSize, data.get(), yuv); |
+ return sk_make_sp<PDFJpegBitmap>(info.fSize, data.get(), yuv); |
} |
} |
} |
} |
- SkPDFObject* smask = |
- image_compute_is_opaque(image) ? nullptr : new PDFAlphaBitmap(image); |
+ sk_sp<SkPDFObject> smask; |
+ if (!image_compute_is_opaque(image.get())) { |
+ smask = sk_make_sp<PDFAlphaBitmap>(image); |
+ } |
#ifdef SK_PDF_IMAGE_STATS |
gRegularImageObjects.fetch_add(1); |
#endif |
- return new PDFDefaultBitmap(image, smask); |
+ return sk_make_sp<PDFDefaultBitmap>(std::move(image), std::move(smask)); |
} |