Add support for row-by-row png encodes

Also adds a SkEncoder base class.

Bug: 713862
Change-Id: Ia3f009cd9f376514f6c19396245fab3a43ae6536
Reviewed-on: https://skia-review.googlesource.com/15152
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
diff --git a/src/images/SkImageEncoderPriv.h b/src/images/SkImageEncoderPriv.h
index 5e57cd1..4d59d04 100644
--- a/src/images/SkImageEncoderPriv.h
+++ b/src/images/SkImageEncoderPriv.h
@@ -9,17 +9,32 @@
 #define SkImageEncoderPriv_DEFINED
 
 #include "SkImageEncoder.h"
+#include "SkImageInfoPriv.h"
+
+static inline bool SkPixmapIsValid(const SkPixmap& src,
+                                   SkTransferFunctionBehavior unpremulBehavior)
+{
+    if (SkTransferFunctionBehavior::kRespect == unpremulBehavior) {
+        if (!SkImageInfoIsValidRenderingCS(src.info())) {
+            return false;
+        }
+    } else {
+        if (!SkImageInfoIsValidAllowNumericalCS(src.info())) {
+            return false;
+        }
+    }
+
+    if (!src.addr() || src.rowBytes() < src.info().minRowBytes()) {
+        return false;
+    }
+
+    return true;
+}
 
 struct SkEncodeOptions {
     SkTransferFunctionBehavior fUnpremulBehavior = SkTransferFunctionBehavior::kIgnore;
 };
 
-#ifdef SK_HAS_PNG_LIBRARY
-    bool SkEncodeImageAsPNG(SkWStream*, const SkPixmap&, const SkEncodeOptions&);
-#else
-    #define SkEncodeImageAsPNG(...) false
-#endif
-
 #ifdef SK_HAS_WEBP_LIBRARY
     bool SkEncodeImageAsWEBP(SkWStream*, const SkPixmap&, const SkEncodeOptions&);
     bool SkEncodeImageAsWEBP(SkWStream*, const SkPixmap&, int quality);