Index: src/pdf/SkDeflate.cpp |
diff --git a/src/pdf/SkDeflate.cpp b/src/pdf/SkDeflate.cpp |
index 0953ef27fb658a866acc60f93009e04eb84566a5..f0c8a5437cb97c78f31fa79fbc8b36d210203ce6 100644 |
--- a/src/pdf/SkDeflate.cpp |
+++ b/src/pdf/SkDeflate.cpp |
@@ -30,7 +30,7 @@ template <typename T> void* skia_alloc_func(void*, T items, T size) { |
static void skia_free_func(void*, void* address) { sk_free(address); } |
-bool doFlate(bool compress, SkStream* src, SkWStream* dst) { |
+static bool do_inflate(SkStream* src, SkWStream* dst) { |
uint8_t inputBuffer[kBufferSize]; |
uint8_t outputBuffer[kBufferSize]; |
z_stream flateData; |
@@ -42,10 +42,7 @@ bool doFlate(bool compress, SkStream* src, SkWStream* dst) { |
flateData.next_out = outputBuffer; |
flateData.avail_out = kBufferSize; |
int rc; |
- if (compress) |
- rc = deflateInit(&flateData, Z_DEFAULT_COMPRESSION); |
- else |
- rc = inflateInit(&flateData); |
+ rc = inflateInit(&flateData); |
if (rc != Z_OK) |
return false; |
@@ -81,16 +78,10 @@ bool doFlate(bool compress, SkStream* src, SkWStream* dst) { |
flateData.next_in = inputBuffer; |
flateData.avail_in = SkToUInt(read); |
} |
- if (compress) |
- rc = deflate(&flateData, Z_NO_FLUSH); |
- else |
- rc = inflate(&flateData, Z_NO_FLUSH); |
+ rc = inflate(&flateData, Z_NO_FLUSH); |
} |
while (rc == Z_OK) { |
- if (compress) |
- rc = deflate(&flateData, Z_FINISH); |
- else |
- rc = inflate(&flateData, Z_FINISH); |
+ rc = inflate(&flateData, Z_FINISH); |
if (flateData.avail_out < kBufferSize) { |
if (!dst->write(outputBuffer, kBufferSize - flateData.avail_out)) |
return false; |
@@ -99,41 +90,19 @@ bool doFlate(bool compress, SkStream* src, SkWStream* dst) { |
} |
} |
- if (compress) |
- deflateEnd(&flateData); |
- else |
- inflateEnd(&flateData); |
- if (rc == Z_STREAM_END) |
- return true; |
- return false; |
+ inflateEnd(&flateData); |
+ return rc == Z_STREAM_END; |
} |
+} // namespace |
-} |
- |
-// static |
-bool SkFlate::Deflate(SkStream* src, SkWStream* dst) { |
- return doFlate(true, src, dst); |
-} |
- |
-bool SkFlate::Deflate(const void* ptr, size_t len, SkWStream* dst) { |
- SkMemoryStream stream(ptr, len); |
- return doFlate(true, &stream, dst); |
-} |
- |
-bool SkFlate::Deflate(const SkData* data, SkWStream* dst) { |
- if (data) { |
- SkMemoryStream stream(data->data(), data->size()); |
- return doFlate(true, &stream, dst); |
+SkStreamAsset* SkInflate(SkStream* src) { |
+ SkDynamicMemoryWStream decompressedDynamicMemoryWStream; |
+ if (!do_inflate(src, &decompressedDynamicMemoryWStream)) { |
+ return nullptr; |
} |
- return false; |
+ return decompressedDynamicMemoryWStream.detachAsStream(); |
} |
-// static |
-bool SkFlate::Inflate(SkStream* src, SkWStream* dst) { |
- return doFlate(false, src, dst); |
-} |
- |
- |
#define SKDEFLATEWSTREAM_INPUT_BUFFER_SIZE 4096 |
#define SKDEFLATEWSTREAM_OUTPUT_BUFFER_SIZE 4224 // 4096 + 128, usually big |
// enough to always do a |