diff options
author | Mike Reed <reed@google.com> | 2017-07-23 15:30:02 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-25 15:35:23 +0000 |
commit | ede7bac43fbc69b9fdf1c178890ba6353f5bb140 (patch) | |
tree | dccdba46e7abf125e2f90e6dc08eca00ad9cb09b /src/codec/SkWebpCodec.cpp | |
parent | fa3ed03720b5083afd3620c9239863f05f2eedbd (diff) |
use unique_ptr for codec factories
Will need guards for android (at least)
Bug: skia:
Change-Id: I2bb8e656997984489ef1f2e41cd3d301c4e7b947
Reviewed-on: https://skia-review.googlesource.com/26040
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'src/codec/SkWebpCodec.cpp')
-rw-r--r-- | src/codec/SkWebpCodec.cpp | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/codec/SkWebpCodec.cpp b/src/codec/SkWebpCodec.cpp index 02e6ff2bf9..94fa175f82 100644 --- a/src/codec/SkWebpCodec.cpp +++ b/src/codec/SkWebpCodec.cpp @@ -11,6 +11,7 @@ #include "SkCodecAnimationPriv.h" #include "SkCodecPriv.h" #include "SkColorSpaceXform.h" +#include "SkMakeUnique.h" #include "SkRasterPipeline.h" #include "SkSampler.h" #include "SkStreamPriv.h" @@ -44,19 +45,18 @@ static SkAlphaType alpha_type(bool hasAlpha) { // Parse headers of RIFF container, and check for valid Webp (VP8) content. // Returns an SkWebpCodec on success -SkCodec* SkWebpCodec::NewFromStream(SkStream* stream, Result* result) { - std::unique_ptr<SkStream> streamDeleter(stream); - +std::unique_ptr<SkCodec> SkWebpCodec::MakeFromStream(std::unique_ptr<SkStream> stream, + Result* result) { // Webp demux needs a contiguous data buffer. sk_sp<SkData> data = nullptr; if (stream->getMemoryBase()) { // It is safe to make without copy because we'll hold onto the stream. data = SkData::MakeWithoutCopy(stream->getMemoryBase(), stream->getLength()); } else { - data = SkCopyStreamToData(stream); + data = SkCopyStreamToData(stream.get()); // If we are forced to copy the stream to a data, we can go ahead and delete the stream. - streamDeleter.reset(nullptr); + stream.reset(nullptr); } // It's a little strange that the |demux| will outlive |webpData|, though it needs the @@ -162,9 +162,8 @@ SkCodec* SkWebpCodec::NewFromStream(SkStream* stream, Result* result) { *result = kSuccess; SkEncodedInfo info = SkEncodedInfo::Make(color, alpha, 8); - return new SkWebpCodec(width, height, info, std::move(colorSpace), - streamDeleter.release(), demux.release(), - std::move(data)); + return std::unique_ptr<SkCodec>(new SkWebpCodec(width, height, info, std::move(colorSpace), + std::move(stream), demux.release(), std::move(data))); } SkISize SkWebpCodec::onGetScaledDimensions(float desiredScale) const { @@ -628,9 +627,9 @@ SkCodec::Result SkWebpCodec::onGetPixels(const SkImageInfo& dstInfo, void* dst, } SkWebpCodec::SkWebpCodec(int width, int height, const SkEncodedInfo& info, - sk_sp<SkColorSpace> colorSpace, SkStream* stream, WebPDemuxer* demux, - sk_sp<SkData> data) - : INHERITED(width, height, info, SkColorSpaceXform::kBGRA_8888_ColorFormat, stream, + sk_sp<SkColorSpace> colorSpace, std::unique_ptr<SkStream> stream, + WebPDemuxer* demux, sk_sp<SkData> data) + : INHERITED(width, height, info, SkColorSpaceXform::kBGRA_8888_ColorFormat, std::move(stream), std::move(colorSpace)) , fDemux(demux) , fData(std::move(data)) |