aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/codec/SkJpegDecoderMgr.cpp
diff options
context:
space:
mode:
authorGravatar cjbao <cathy.bao@intel.com>2017-05-22 23:40:36 +0800
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-06-05 14:57:46 +0000
commit96cc36124d06e023005dd901b32c59b29f55a135 (patch)
treea7b45bd876d3d22094be83a926fc5741f8bd778e /src/codec/SkJpegDecoderMgr.cpp
parent4b0b00e0c3eefd08057b7f713143df3b2a7cc911 (diff)
Handle different types of streams in different jpeg source managers
For streams that are memory backed (stream->getMemoryBase() returns a non-null ptr and hasLength() returns true), handle the stream with skjpeg_mem_source_mgr, which directly assigns memory base to the source manager. For other non memory backed streams, handle the stream with skjpeg_buffered_source_mgr, which is renamed from the old skjpeg_source_mgr with no implementation change. Signed-off-by: cjbao <cathy.bao@intel.com> Bug: skia: Change-Id: I748de0bdba726bbb318922c08497135e73e37329 Reviewed-on: https://skia-review.googlesource.com/17296 Reviewed-by: Leon Scroggins <scroggo@google.com> Reviewed-by: Matt Sarett <msarett@google.com> Commit-Queue: Matt Sarett <msarett@google.com>
Diffstat (limited to 'src/codec/SkJpegDecoderMgr.cpp')
-rw-r--r--src/codec/SkJpegDecoderMgr.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/codec/SkJpegDecoderMgr.cpp b/src/codec/SkJpegDecoderMgr.cpp
index c2837aa2b4..0b02111a76 100644
--- a/src/codec/SkJpegDecoderMgr.cpp
+++ b/src/codec/SkJpegDecoderMgr.cpp
@@ -69,9 +69,13 @@ bool JpegDecoderMgr::getEncodedColor(SkEncodedInfo::Color* outColor) {
}
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 @@ JpegDecoderMgr::JpegDecoderMgr(SkStream* stream)
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;