Home | History | Annotate | Download | only in core
      1 /*
      2  * Copyright 2014 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #ifndef SkPixelSerializer_DEFINED
      9 #define SkPixelSerializer_DEFINED
     10 
     11 #include "SkRefCnt.h"
     12 
     13 class SkData;
     14 struct SkImageInfo;
     15 
     16 /**
     17  *  Interface for serializing pixels, e.g. SkBitmaps in an SkPicture.
     18  */
     19 class SkPixelSerializer : public SkRefCnt {
     20 public:
     21     virtual ~SkPixelSerializer() {}
     22 
     23     /**
     24      *  Call to determine if the client wants to serialize the encoded data. If
     25      *  false, serialize another version (e.g. the result of encodePixels).
     26      */
     27     bool useEncodedData(const void* data, size_t len) {
     28         return this->onUseEncodedData(data, len);
     29     }
     30 
     31     /**
     32      *  Call to get the client's version of encoding these pixels. If it
     33      *  returns NULL, serialize the raw pixels.
     34      */
     35     SkData* encodePixels(const SkImageInfo& info, const void* pixels, size_t rowBytes) {
     36         return this->onEncodePixels(info, pixels, rowBytes);
     37     }
     38 
     39 protected:
     40     /**
     41      *  Return true if you want to serialize the encoded data, false if you want
     42      *  another version serialized (e.g. the result of encodePixels).
     43      */
     44     virtual bool onUseEncodedData(const void* data, size_t len) = 0;
     45 
     46     /**
     47      *  If you want to encode these pixels, return the encoded data as an SkData
     48      *  Return null if you want to serialize the raw pixels.
     49      */
     50     virtual SkData* onEncodePixels(const SkImageInfo&, const void* pixels, size_t rowBytes) = 0;
     51 };
     52 #endif // SkPixelSerializer_DEFINED
     53