Revert of Fix rewinding bug in SkJpegCodec (patchset #1 id:1 of https://codereview.chromium.org/2161593003/ )
Reason for revert:
Breaking Google3 build. Will reland corrected version.
Original issue's description:
> Fix rewinding bug in SkJpegCodec
>
> Performing a sampled and/or subset decode will create some state
> in SkJpegCodec. If we fail to clean up this state properly,
> subsequent decodes may try to reuse (and potentailly overflow)
> the leftover memory.
>
> BUG=skia:
> GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2161593003
>
> Committed: https://skia.googlesource.com/skia/+/4ecb8ab556214c9337f56bc36d50e4d7c655ac7a
TBR=djsollen@google.com
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Review-Url: https://codereview.chromium.org/2155163004
diff --git a/src/codec/SkJpegCodec.cpp b/src/codec/SkJpegCodec.cpp
index eb05954..0413f79 100644
--- a/src/codec/SkJpegCodec.cpp
+++ b/src/codec/SkJpegCodec.cpp
@@ -339,11 +339,6 @@
}
SkASSERT(nullptr != decoderMgr);
fDecoderMgr.reset(decoderMgr);
-
- fSwizzler.reset(nullptr);
- fSrcRow = nullptr;
- fStorage.reset();
-
return true;
}
@@ -593,6 +588,11 @@
return kInvalidConversion;
}
+ // Remove objects used for sampling.
+ fSwizzler.reset(nullptr);
+ fSrcRow = nullptr;
+ fStorage.reset();
+
// Now, given valid output dimensions, we can start the decompress
if (!jpeg_start_decompress(fDecoderMgr->dinfo())) {
SkCodecPrintf("start decompress failed\n");
diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp
index b8b957f..12d6ac8 100644
--- a/tests/CodecTest.cpp
+++ b/tests/CodecTest.cpp
@@ -1012,32 +1012,3 @@
REPORTER_ASSERT(r, !codec);
}
-
-DEF_TEST(Codec_jpeg_rewind, r) {
- const char* path = "mandrill_512_q075.jpg";
- SkAutoTDelete<SkStream> stream(resource(path));
- if (!stream) {
- SkDebugf("Missing resource '%s'\n", path);
- return;
- }
- SkAutoTDelete<SkAndroidCodec> codec(SkAndroidCodec::NewFromStream(stream.release()));
- if (!codec) {
- ERRORF(r, "Unable to create codec '%s'.", path);
- return;
- }
-
- const int width = codec->getInfo().width();
- const int height = codec->getInfo().height();
- size_t rowBytes = sizeof(SkPMColor) * width;
- SkAutoMalloc pixelStorage(height * rowBytes);
-
- // Perform a sampled decode.
- SkAndroidCodec::AndroidOptions opts;
- opts.fSampleSize = 12;
- codec->getAndroidPixels(codec->getInfo().makeWH(width / 12, height / 12), pixelStorage.get(),
- rowBytes, &opts);
-
- // Rewind the codec and perform a full image decode.
- SkCodec::Result result = codec->getPixels(codec->getInfo(), pixelStorage.get(), rowBytes);
- REPORTER_ASSERT(r, SkCodec::kSuccess == result);
-}