Use a smart pointer for SkColorSpace factories
authormsarett <msarett@google.com>
Mon, 7 Mar 2016 15:09:03 +0000 (07:09 -0800)
committerCommit bot <commit-bot@chromium.org>
Mon, 7 Mar 2016 15:09:03 +0000 (07:09 -0800)
This should fix master-skia in Android because we no longer need
to include src/core for SkCodec.h.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1766413002

Review URL: https://codereview.chromium.org/1766413002

13 files changed:
gyp/codec_android.gyp
include/codec/SkCodec.h
src/codec/SkBmpCodec.h
src/codec/SkCodec.cpp
src/codec/SkGifCodec.h
src/codec/SkJpegCodec.h
src/codec/SkPngCodec.cpp
src/codec/SkPngCodec.h
src/codec/SkRawCodec.h
src/codec/SkWbmpCodec.h
src/codec/SkWebpCodec.h
src/core/SkColorSpace.cpp
src/core/SkColorSpace.h

index a303494e435b18a102cdefeca6893a689ec12bb2..ca9c7a36b528b17ff57be2521538cd055f6e9ec9 100644 (file)
@@ -25,7 +25,6 @@
         '../include/private',
         '../src/android',
         '../src/codec',
-        '../src/core',
       ],
       'sources': [
         '../src/android/SkBitmapRegionCanvas.cpp',
index 78295eb1fc5a393216bf6e856071ab0da41cf4f6..7e7503acae83f54ccc00bc13a51b4e9ab4a06dc4 100644 (file)
 
 #include "../private/SkTemplates.h"
 #include "SkColor.h"
-#include "SkColorSpace.h"
 #include "SkEncodedFormat.h"
 #include "SkImageInfo.h"
 #include "SkSize.h"
 #include "SkStream.h"
 #include "SkTypes.h"
 
+class SkColorSpace;
 class SkData;
 class SkPngChunkReader;
 class SkSampler;
@@ -104,7 +104,7 @@ public:
      *  Does not affect ownership.
      *  Might be NULL.
      */
-    SkColorSpace* getColorSpace() const { return fColorSpace; }
+    SkColorSpace* getColorSpace() const { return fColorSpace.get(); }
 
     /**
      *  Return a size that approximately supports the desired scale factor.
@@ -514,7 +514,7 @@ protected:
      *  Takes ownership of SkStream*
      *  Does not affect ownership of SkColorSpace*
      */
-    SkCodec(const SkImageInfo&, SkStream*, SkColorSpace* = nullptr);
+    SkCodec(const SkImageInfo&, SkStream*, sk_sp<SkColorSpace> = nullptr);
 
     virtual SkISize onGetScaledDimensions(float /*desiredScale*/) const {
         // By default, scaling is not supported.
@@ -645,7 +645,7 @@ private:
     const SkImageInfo           fSrcInfo;
     SkAutoTDelete<SkStream>     fStream;
     bool                        fNeedsRewind;
-    SkAutoTUnref<SkColorSpace>  fColorSpace;
+    sk_sp<SkColorSpace>         fColorSpace;
 
     // These fields are only meaningful during scanline decodes.
     SkImageInfo                 fDstInfo;
index a54734f431cff4c334b8a93dcd17779214d170c4..a7e8e58431ba59d2146d4e78de779a46bbeafeed 100644 (file)
@@ -8,6 +8,7 @@
 #define SkBmpCodec_DEFINED
 
 #include "SkCodec.h"
+#include "SkColorSpace.h"
 #include "SkColorTable.h"
 #include "SkImageInfo.h"
 #include "SkStream.h"
index 4a1902dc53faf4b089c88fe01459491b4557d475..c8de73cd89b2416017d5f62991c4851d2422eda6 100644 (file)
@@ -8,6 +8,7 @@
 #include "SkBmpCodec.h"
 #include "SkCodec.h"
 #include "SkCodecPriv.h"
+#include "SkColorSpace.h"
 #include "SkData.h"
 #include "SkGifCodec.h"
 #include "SkIcoCodec.h"
@@ -113,11 +114,11 @@ SkCodec* SkCodec::NewFromData(SkData* data, SkPngChunkReader* reader) {
     return NewFromStream(new SkMemoryStream(data), reader);
 }
 
-SkCodec::SkCodec(const SkImageInfo& info, SkStream* stream, SkColorSpace* colorSpace)
+SkCodec::SkCodec(const SkImageInfo& info, SkStream* stream, sk_sp<SkColorSpace> colorSpace)
     : fSrcInfo(info)
     , fStream(stream)
     , fNeedsRewind(false)
-    , fColorSpace(colorSpace ? SkRef(colorSpace) : nullptr)
+    , fColorSpace(colorSpace)
     , fDstInfo()
     , fOptions()
     , fCurrScanline(-1)
index a46667a375a560f2155e6d78b2829c99718756a3..a08e7ee552f572158c44c60e31da398af1fd3e26 100644 (file)
@@ -6,6 +6,7 @@
  */
 
 #include "SkCodec.h"
+#include "SkColorSpace.h"
 #include "SkColorTable.h"
 #include "SkImageInfo.h"
 #include "SkSwizzler.h"
index bb5ce75375fa899c238dfd0dbeeaafcb31814242..e3448e9dd1287c6605ba750c1f9768285c49b284 100644 (file)
@@ -9,6 +9,7 @@
 #define SkJpegCodec_DEFINED
 
 #include "SkCodec.h"
+#include "SkColorSpace.h"
 #include "SkImageInfo.h"
 #include "SkSwizzler.h"
 #include "SkStream.h"
index 23f7bee0cfed33cd0f4c7c45caaca4f4e1d7aa5c..317defb368c1739ab688dc9b8fbb104116fc0727 100644 (file)
@@ -5,10 +5,11 @@
  * found in the LICENSE file.
  */
 
+#include "SkBitmap.h"
 #include "SkCodecPriv.h"
 #include "SkColorPriv.h"
+#include "SkColorSpace.h"
 #include "SkColorTable.h"
-#include "SkBitmap.h"
 #include "SkMath.h"
 #include "SkOpts.h"
 #include "SkPngCodec.h"
@@ -176,7 +177,7 @@ static float png_fixed_point_to_float(png_fixed_point x) {
 // Returns a colorSpace object that represents any color space information in
 // the encoded data.  If the encoded data contains no color space, this will
 // return NULL.
-SkColorSpace* read_color_space(png_structp png_ptr, png_infop info_ptr) {
+sk_sp<SkColorSpace> read_color_space(png_structp png_ptr, png_infop info_ptr) {
 
 #if (PNG_LIBPNG_VER_MAJOR > 1) || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR >= 6)
 
@@ -426,7 +427,7 @@ static bool read_header(SkStream* stream, SkPngChunkReader* chunkReader,
 
 SkPngCodec::SkPngCodec(const SkImageInfo& info, SkStream* stream, SkPngChunkReader* chunkReader,
                        png_structp png_ptr, png_infop info_ptr, int bitDepth, int numberPasses,
-                       SkColorSpace* colorSpace)
+                       sk_sp<SkColorSpace> colorSpace)
     : INHERITED(info, stream, colorSpace)
     , fPngChunkReader(SkSafeRef(chunkReader))
     , fPng_ptr(png_ptr)
@@ -638,7 +639,7 @@ class SkPngScanlineDecoder : public SkPngCodec {
 public:
     SkPngScanlineDecoder(const SkImageInfo& srcInfo, SkStream* stream,
             SkPngChunkReader* chunkReader, png_structp png_ptr, png_infop info_ptr, int bitDepth,
-            SkColorSpace* colorSpace)
+            sk_sp<SkColorSpace> colorSpace)
         : INHERITED(srcInfo, stream, chunkReader, png_ptr, info_ptr, bitDepth, 1, colorSpace)
         , fSrcRow(nullptr)
     {}
@@ -704,7 +705,7 @@ class SkPngInterlacedScanlineDecoder : public SkPngCodec {
 public:
     SkPngInterlacedScanlineDecoder(const SkImageInfo& srcInfo, SkStream* stream,
             SkPngChunkReader* chunkReader, png_structp png_ptr, png_infop info_ptr,
-            int bitDepth, int numberPasses, SkColorSpace* colorSpace)
+            int bitDepth, int numberPasses, sk_sp<SkColorSpace> colorSpace)
         : INHERITED(srcInfo, stream, chunkReader, png_ptr, info_ptr, bitDepth, numberPasses,
                     colorSpace)
         , fHeight(-1)
@@ -837,7 +838,7 @@ SkCodec* SkPngCodec::NewFromStream(SkStream* stream, SkPngChunkReader* chunkRead
         return nullptr;
     }
 
-    SkAutoTUnref<SkColorSpace> colorSpace(read_color_space(png_ptr, info_ptr));
+    auto colorSpace = read_color_space(png_ptr, info_ptr);
 
     if (1 == numberPasses) {
         return new SkPngScanlineDecoder(imageInfo, streamDeleter.detach(), chunkReader,
index 9e6628c86b71923900b2aefaaf25be19c5543ba3..5673e5b4fac734891a690f145bac373c35abe267 100644 (file)
@@ -42,7 +42,7 @@ protected:
     }
 
     SkPngCodec(const SkImageInfo&, SkStream*, SkPngChunkReader*, png_structp, png_infop, int, int,
-               SkColorSpace*);
+               sk_sp<SkColorSpace>);
 
     png_structp png_ptr() { return fPng_ptr; }
     SkSwizzler* swizzler() { return fSwizzler; }
index 42755c3ef1e59802853d2ab61bf0aa8b80e12667..e091c97d3fbfb591ed38345e862fdc121e481512 100644 (file)
@@ -9,6 +9,7 @@
 #define SkRawCodec_DEFINED
 
 #include "SkCodec.h"
+#include "SkColorSpace.h"
 #include "SkImageInfo.h"
 #include "SkTypes.h"
 
index ceeadd4cc886f426f907a2b27ae7759e23465bc0..f43f615ed25273b6bc13a90c623dbd3ed8140fd8 100644 (file)
@@ -9,6 +9,7 @@
 #define SkCodec_wbmp_DEFINED
 
 #include "SkCodec.h"
+#include "SkColorSpace.h"
 #include "SkSwizzler.h"
 
 class SkWbmpCodec final : public SkCodec {
index dfc9f12ee98fbcec946f4c879fb71acafe573948..2d81cf3d9cfa68cfd35809afee6a9883425af9b6 100644 (file)
@@ -9,6 +9,7 @@
 #define SkWebpCodec_DEFINED
 
 #include "SkCodec.h"
+#include "SkColorSpace.h"
 #include "SkEncodedFormat.h"
 #include "SkImageInfo.h"
 #include "SkTypes.h"
index b852d2dca2c179f09c5147d2fbfddb1e3c5f4d16..8424513961a07ce780ed268f79f20a2fdac459b4 100644 (file)
@@ -102,7 +102,7 @@ SkColorSpace::SkColorSpace(const SkFloat3x3& toXYZD50, const SkFloat3& gamma, Na
     }
 }
 
-SkColorSpace* SkColorSpace::NewRGB(const SkFloat3x3& toXYZD50, const SkFloat3& gamma) {
+sk_sp<SkColorSpace> SkColorSpace::NewRGB(const SkFloat3x3& toXYZD50, const SkFloat3& gamma) {
     for (int i = 0; i < 3; ++i) {
         if (!SkFloatIsFinite(gamma.fVec[i]) || gamma.fVec[i] < 0) {
             return nullptr;
@@ -120,7 +120,7 @@ SkColorSpace* SkColorSpace::NewRGB(const SkFloat3x3& toXYZD50, const SkFloat3& g
         return nullptr;
     }
 
-    return new SkColorSpace(toXYZD50, gamma, kUnknown_Named);
+    return sk_sp<SkColorSpace>(new SkColorSpace(toXYZD50, gamma, kUnknown_Named));
 }
 
 void SkColorSpace::dump() const {
@@ -144,12 +144,13 @@ const SkFloat3x3 gSRGB_toXYZD50 {{
     0.1430f, 0.0606f, 0.7139f,    // * B
 }};
 
-SkColorSpace* SkColorSpace::NewNamed(Named named) {
+sk_sp<SkColorSpace> SkColorSpace::NewNamed(Named named) {
     switch (named) {
         case kDevice_Named:
-            return new SkColorSpace(gDevice_toXYZD50, gDevice_gamma, kDevice_Named);
+            return sk_sp<SkColorSpace>(new SkColorSpace(gDevice_toXYZD50, gDevice_gamma,
+                                                        kDevice_Named));
         case kSRGB_Named:
-            return new SkColorSpace(gSRGB_toXYZD50, gSRGB_gamma, kSRGB_Named);
+            return sk_sp<SkColorSpace>(new SkColorSpace(gSRGB_toXYZD50, gSRGB_gamma, kSRGB_Named));
         default:
             break;
     }
@@ -377,7 +378,7 @@ static bool load_gamma(float* gamma, const uint8_t* src, size_t len) {
     }
 }
 
-SkColorSpace* SkColorSpace::NewICC(const void* base, size_t len) {
+sk_sp<SkColorSpace> SkColorSpace::NewICC(const void* base, size_t len) {
     const uint8_t* ptr = (const uint8_t*) base;
 
     if (len < kICCHeaderSize) {
@@ -528,13 +529,13 @@ void SkColorSpace::Test() {
     concat(inv, mat).dump();
     SkDebugf("\n");
 
-    SkAutoTUnref<SkColorSpace> cs0(SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named));
-    SkAutoTUnref<SkColorSpace> cs1(SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named));
+    sk_sp<SkColorSpace> cs0(SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named));
+    sk_sp<SkColorSpace> cs1(SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named));
 
     cs0->dump();
     cs1->dump();
     SkFloat3x3 xform;
-    (void)SkColorSpace::Concat(cs0, cs1, &xform);
+    (void)SkColorSpace::Concat(cs0.get(), cs1.get(), &xform);
     xform.dump();
     SkDebugf("\n");
 }
index ec6ab43c3cdd28d3865f2162bb9d84483241f72f..777be9da2b4ebaae9e918197517775adb2a82777 100644 (file)
@@ -50,10 +50,10 @@ public:
      *  Return a colorspace instance, given a 3x3 transform from linear_RGB to D50_XYZ
      *  and the src-gamma, return a ColorSpace
      */
-    static SkColorSpace* NewRGB(const SkFloat3x3& toXYZD50, const SkFloat3& gamma);
+    static sk_sp<SkColorSpace> NewRGB(const SkFloat3x3& toXYZD50, const SkFloat3& gamma);
 
-    static SkColorSpace* NewNamed(Named);
-    static SkColorSpace* NewICC(const void*, size_t);
+    static sk_sp<SkColorSpace> NewNamed(Named);
+    static sk_sp<SkColorSpace> NewICC(const void*, size_t);
 
     SkFloat3 gamma() const { return fGamma; }
     SkFloat3x3 xyz() const { return fToXYZD50; }