diff options
author | Matt Sarett <msarett@google.com> | 2017-06-06 17:58:33 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-06-06 18:20:40 +0000 |
commit | 15f4d02738895663daa484e4c8677cbad41bcab5 (patch) | |
tree | 3ee2e4f4f2b592fca2e82838fb84df80e66a617f /src | |
parent | 23f734cbf6688b120d9d6cc0a0c5beac4abbf51e (diff) |
Revert "Handle different types of streams in different jpeg source managers"
This reverts commit 96cc36124d06e023005dd901b32c59b29f55a135.
Reason for revert: I think this is break one of our test bots. I will reland once that is figured out.
Original change's description:
> 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>
>
TBR=msarett@google.com,scroggo@google.com,cathy.bao@intel.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: skia:
Change-Id: Idf6c426468cc959b3f4661c0b3e86cb4d5e93688
Reviewed-on: https://skia-review.googlesource.com/18850
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/codec/SkJpegDecoderMgr.cpp | 10 | ||||
-rw-r--r-- | src/codec/SkJpegDecoderMgr.h | 10 | ||||
-rw-r--r-- | src/codec/SkJpegUtility.cpp | 67 | ||||
-rw-r--r-- | src/codec/SkJpegUtility.h | 11 |
4 files changed, 22 insertions, 76 deletions
diff --git a/src/codec/SkJpegDecoderMgr.cpp b/src/codec/SkJpegDecoderMgr.cpp index 0b02111a76..c2837aa2b4 100644 --- a/src/codec/SkJpegDecoderMgr.cpp +++ b/src/codec/SkJpegDecoderMgr.cpp @@ -69,13 +69,9 @@ bool JpegDecoderMgr::getEncodedColor(SkEncodedInfo::Color* outColor) { } JpegDecoderMgr::JpegDecoderMgr(SkStream* stream) - : fInit(false) + : fSrcMgr(stream) + , 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; @@ -84,7 +80,7 @@ JpegDecoderMgr::JpegDecoderMgr(SkStream* stream) void JpegDecoderMgr::init() { jpeg_create_decompress(&fDInfo); fInit = true; - fDInfo.src = fSrcMgr.get(); + fDInfo.src = &fSrcMgr; 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 20988eb724..272c5b4b1c 100644 --- a/src/codec/SkJpegDecoderMgr.h +++ b/src/codec/SkJpegDecoderMgr.h @@ -65,11 +65,11 @@ public: private: - jpeg_decompress_struct fDInfo; - std::unique_ptr<jpeg_source_mgr> fSrcMgr; - skjpeg_error_mgr fErrorMgr; - jpeg_progress_mgr fProgressMgr; - bool fInit; + jpeg_decompress_struct fDInfo; + skjpeg_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 b2284c8159..2cf36bacf1 100644 --- a/src/codec/SkJpegUtility.cpp +++ b/src/codec/SkJpegUtility.cpp @@ -10,10 +10,10 @@ #include "SkCodecPriv.h" /* - * Initialize the buffered source manager + * Initialize the source manager */ -static void sk_init_buffered_source(j_decompress_ptr dinfo) { - skjpeg_buffered_source_mgr* src = (skjpeg_buffered_source_mgr*) dinfo->src; +static void sk_init_source(j_decompress_ptr dinfo) { + skjpeg_source_mgr* src = (skjpeg_source_mgr*) dinfo->src; src->next_input_byte = (const JOCTET*) src->fBuffer; src->bytes_in_buffer = 0; } @@ -21,9 +21,9 @@ static void sk_init_buffered_source(j_decompress_ptr dinfo) { /* * Fill the input buffer from the stream */ -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); +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); // 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 @@ static boolean sk_fill_buffered_input_buffer(j_decompress_ptr dinfo) { /* * Skip a certain number of bytes in the stream */ -static void sk_skip_buffered_input_data(j_decompress_ptr dinfo, long numBytes) { - skjpeg_buffered_source_mgr* src = (skjpeg_buffered_source_mgr*) dinfo->src; +static void sk_skip_input_data(j_decompress_ptr dinfo, long numBytes) { + skjpeg_source_mgr* src = (skjpeg_source_mgr*) dinfo->src; size_t bytes = (size_t) numBytes; if (bytes > src->bytes_in_buffer) { @@ -73,12 +73,12 @@ static void sk_term_source(j_decompress_ptr dinfo) * 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_buffered_source_mgr::skjpeg_buffered_source_mgr(SkStream* stream) +skjpeg_source_mgr::skjpeg_source_mgr(SkStream* stream) : fStream(stream) { - init_source = sk_init_buffered_source; - fill_input_buffer = sk_fill_buffered_input_buffer; - skip_input_data = sk_skip_buffered_input_data; + init_source = sk_init_source; + fill_input_buffer = sk_fill_input_buffer; + skip_input_data = sk_skip_input_data; resync_to_restart = jpeg_resync_to_restart; term_source = sk_term_source; } @@ -93,46 +93,3 @@ void skjpeg_err_exit(j_common_ptr dinfo) { (*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 e5dd848d99..33f4fbda8b 100644 --- a/src/codec/SkJpegUtility.h +++ b/src/codec/SkJpegUtility.h @@ -29,8 +29,8 @@ void skjpeg_err_exit(j_common_ptr cinfo); /* * Source handling struct for that allows libjpeg to use our stream object */ -struct skjpeg_buffered_source_mgr : jpeg_source_mgr { - skjpeg_buffered_source_mgr(SkStream* stream); +struct skjpeg_source_mgr : jpeg_source_mgr { + skjpeg_source_mgr(SkStream* stream); SkStream* fStream; // unowned enum { @@ -41,11 +41,4 @@ struct skjpeg_buffered_source_mgr : jpeg_source_mgr { 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 |