Add currScanline() getter to SkCodec API

This is more correct than using nextScanline() for the
SkGifCodec scanline decoder (since we will get a strange
result in the interlaced case) and is necessary if we want
to add scanline decoding to SkIcoCodec.

This does not actually fix bugs or change behavior.

BUG=skia:

Review URL: https://codereview.chromium.org/1489163002
This commit is contained in:
msarett 2015-12-03 12:23:43 -08:00 committed by Commit bot
parent 2b1516fe35
commit cb0d5c940a
3 changed files with 15 additions and 7 deletions

View File

@ -415,9 +415,9 @@ public:
int nextScanline() const { return this->outputScanline(fCurrScanline); }
/**
* Returns the output y-coordinate of the row that corresponds to an input
* y-coordinate. The input y-coordinate represents where the scanline
* is located in the encoded data.
* Returns the output y-coordinate of the row that corresponds to an input
* y-coordinate. The input y-coordinate represents where the scanline
* is located in the encoded data.
*
* This will equal inputScanline, except in the case of strangely
* encoded image types (bottom-up bmps, interlaced gifs).
@ -529,14 +529,22 @@ protected:
virtual SkScanlineOrder onGetScanlineOrder() const { return kTopDown_SkScanlineOrder; }
/**
* Update the next scanline. Used by interlaced png.
* Update the current scanline. Used by interlaced png.
*/
void updateNextScanline(int newY) { fCurrScanline = newY; }
void updateCurrScanline(int newY) { fCurrScanline = newY; }
const SkImageInfo& dstInfo() const { return fDstInfo; }
const SkCodec::Options& options() const { return fOptions; }
/**
* Returns the number of scanlines that have been decoded so far.
* This is unaffected by the SkScanlineOrder.
*
* Returns -1 if we have not started a scanline decode.
*/
int currScanline() const { return fCurrScanline; }
virtual int onOutputScanline(int inputScanline) const;
private:

View File

@ -508,7 +508,7 @@ SkCodec::Result SkGifCodec::onStartScanlineDecode(const SkImageInfo& dstInfo,
void SkGifCodec::handleScanlineFrame(int count, int* rowsBeforeFrame, int* rowsInFrame) {
if (fFrameIsSubset) {
const int currRow = this->INHERITED::nextScanline();
const int currRow = this->currScanline();
// The number of rows that remain to be skipped before reaching rows that we
// actually must decode into.

View File

@ -768,7 +768,7 @@ public:
if (!this->rewindIfNeeded()) {
return kCouldNotRewind;
}
this->updateNextScanline(currScanline);
this->updateCurrScanline(currScanline);
}
if (setjmp(png_jmpbuf(this->png_ptr()))) {