diff --git a/src/codec/SkJpegDecoderMgr.cpp b/src/codec/SkJpegDecoderMgr.cpp
index c2837aa..0b02111 100644
--- a/src/codec/SkJpegDecoderMgr.cpp
+++ b/src/codec/SkJpegDecoderMgr.cpp
@@ -69,9 +69,13 @@
 }
 
 JpegDecoderMgr::JpegDecoderMgr(SkStream* stream)
-    : fSrcMgr(stream)
-    , fInit(false)
+    : fInit(false)
 {
+    if(stream->getMemoryBase() && stream->hasLength()) {
+        fSrcMgr.reset(new skjpeg_mem_source_mgr(stream));
+    } else {
+        fSrcMgr.reset(new skjpeg_buffered_source_mgr(stream));
+    }
     // Error manager must be set before any calls to libjeg in order to handle failures
     fDInfo.err = jpeg_std_error(&fErrorMgr);
     fErrorMgr.error_exit = skjpeg_err_exit;
@@ -80,7 +84,7 @@
 void JpegDecoderMgr::init() {
     jpeg_create_decompress(&fDInfo);
     fInit = true;
-    fDInfo.src = &fSrcMgr;
+    fDInfo.src = fSrcMgr.get();
     fDInfo.err->output_message = &output_message;
     fDInfo.progress = &fProgressMgr;
     fProgressMgr.progress_monitor = &progress_monitor;
diff --git a/src/codec/SkJpegDecoderMgr.h b/src/codec/SkJpegDecoderMgr.h
index 272c5b4..20988eb 100644
--- a/src/codec/SkJpegDecoderMgr.h
+++ b/src/codec/SkJpegDecoderMgr.h
@@ -65,11 +65,11 @@
 
 private:
 
-    jpeg_decompress_struct fDInfo;
-    skjpeg_source_mgr      fSrcMgr;
-    skjpeg_error_mgr       fErrorMgr;
-    jpeg_progress_mgr      fProgressMgr;
-    bool                   fInit;
+    jpeg_decompress_struct           fDInfo;
+    std::unique_ptr<jpeg_source_mgr> fSrcMgr;
+    skjpeg_error_mgr                 fErrorMgr;
+    jpeg_progress_mgr                fProgressMgr;
+    bool                             fInit;
 };
 
 #endif
diff --git a/src/codec/SkJpegUtility.cpp b/src/codec/SkJpegUtility.cpp
index 2cf36ba..b2284c8 100644
--- a/src/codec/SkJpegUtility.cpp
+++ b/src/codec/SkJpegUtility.cpp
@@ -10,10 +10,10 @@
 #include "SkCodecPriv.h"
 
 /*
- * Initialize the source manager
+ * Initialize the buffered source manager
  */
-static void sk_init_source(j_decompress_ptr dinfo) {
-    skjpeg_source_mgr* src = (skjpeg_source_mgr*) dinfo->src;
+static void sk_init_buffered_source(j_decompress_ptr dinfo) {
+    skjpeg_buffered_source_mgr* src = (skjpeg_buffered_source_mgr*) dinfo->src;
     src->next_input_byte = (const JOCTET*) src->fBuffer;
     src->bytes_in_buffer = 0;
 }
@@ -21,9 +21,9 @@
 /*
  * Fill the input buffer from the stream
  */
-static boolean sk_fill_input_buffer(j_decompress_ptr dinfo) {
-    skjpeg_source_mgr* src = (skjpeg_source_mgr*) dinfo->src;
-    size_t bytes = src->fStream->read(src->fBuffer, skjpeg_source_mgr::kBufferSize);
+static boolean sk_fill_buffered_input_buffer(j_decompress_ptr dinfo) {
+    skjpeg_buffered_source_mgr* src = (skjpeg_buffered_source_mgr*) dinfo->src;
+    size_t bytes = src->fStream->read(src->fBuffer, skjpeg_buffered_source_mgr::kBufferSize);
 
     // libjpeg is still happy with a less than full read, as long as the result is non-zero
     if (bytes == 0) {
@@ -38,8 +38,8 @@
 /*
  * Skip a certain number of bytes in the stream
  */
-static void sk_skip_input_data(j_decompress_ptr dinfo, long numBytes) {
-    skjpeg_source_mgr* src = (skjpeg_source_mgr*) dinfo->src;
+static void sk_skip_buffered_input_data(j_decompress_ptr dinfo, long numBytes) {
+    skjpeg_buffered_source_mgr* src = (skjpeg_buffered_source_mgr*) dinfo->src;
     size_t bytes = (size_t) numBytes;
 
     if (bytes > src->bytes_in_buffer) {
@@ -73,12 +73,12 @@
  * Constructor for the source manager that we provide to libjpeg
  * We provide skia implementations of all of the stream processing functions required by libjpeg
  */
-skjpeg_source_mgr::skjpeg_source_mgr(SkStream* stream)
+skjpeg_buffered_source_mgr::skjpeg_buffered_source_mgr(SkStream* stream)
     : fStream(stream)
 {
-    init_source = sk_init_source;
-    fill_input_buffer = sk_fill_input_buffer;
-    skip_input_data = sk_skip_input_data;
+    init_source = sk_init_buffered_source;
+    fill_input_buffer = sk_fill_buffered_input_buffer;
+    skip_input_data = sk_skip_buffered_input_data;
     resync_to_restart = jpeg_resync_to_restart;
     term_source = sk_term_source;
 }
@@ -93,3 +93,46 @@
     (*error->output_message) (dinfo);
     longjmp(error->fJmpBuf, 1);
 }
+
+/* memory backed source manager */
+/*
+ * Initialize the mem backed source manager
+ */
+static void sk_init_mem_source(j_decompress_ptr dinfo) {
+    /* no work necessary here, all things are done in constructor */
+}
+
+static void sk_skip_mem_input_data (j_decompress_ptr cinfo, long num_bytes) {
+    jpeg_source_mgr* src = cinfo->src;
+    size_t bytes = static_cast<size_t>(num_bytes);
+    if(bytes > src->bytes_in_buffer) {
+        src->next_input_byte = nullptr;
+        src->bytes_in_buffer = 0;
+    } else {
+        src->next_input_byte += bytes;
+        src->bytes_in_buffer -= bytes;
+    }
+}
+
+static boolean sk_fill_mem_input_buffer (j_decompress_ptr cinfo) {
+    /* The whole JPEG data is expected to reside in the supplied memory,
+     * buffer, so any request for more data beyond the given buffer size
+     * is treated as an error.
+     */
+    return false;
+}
+
+skjpeg_mem_source_mgr::skjpeg_mem_source_mgr(SkStream* stream)
+{
+    SkASSERT(stream->hasLength());
+    SkASSERT(stream->getMemoryBase());
+
+    init_source = sk_init_mem_source;
+    fill_input_buffer = sk_fill_mem_input_buffer;
+    skip_input_data = sk_skip_mem_input_data;
+    resync_to_restart = jpeg_resync_to_restart;
+    term_source = sk_term_source;
+    bytes_in_buffer = static_cast<size_t>(stream->getLength());
+    next_input_byte = static_cast<const JOCTET*>(stream->getMemoryBase());
+}
+
diff --git a/src/codec/SkJpegUtility.h b/src/codec/SkJpegUtility.h
index 33f4fbd..e5dd848 100644
--- a/src/codec/SkJpegUtility.h
+++ b/src/codec/SkJpegUtility.h
@@ -29,8 +29,8 @@
 /*
  * Source handling struct for that allows libjpeg to use our stream object
  */
-struct skjpeg_source_mgr : jpeg_source_mgr {
-    skjpeg_source_mgr(SkStream* stream);
+struct skjpeg_buffered_source_mgr : jpeg_source_mgr {
+    skjpeg_buffered_source_mgr(SkStream* stream);
 
     SkStream* fStream; // unowned
     enum {
@@ -41,4 +41,11 @@
     uint8_t fBuffer[kBufferSize];
 };
 
+/*
+ * source for memory backed streams with a valid length
+ */
+struct skjpeg_mem_source_mgr : jpeg_source_mgr {
+    skjpeg_mem_source_mgr(SkStream* stream);
+};
+
 #endif
