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:
parent
2b1516fe35
commit
cb0d5c940a
@ -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:
|
||||
|
@ -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.
|
||||
|
@ -768,7 +768,7 @@ public:
|
||||
if (!this->rewindIfNeeded()) {
|
||||
return kCouldNotRewind;
|
||||
}
|
||||
this->updateNextScanline(currScanline);
|
||||
this->updateCurrScanline(currScanline);
|
||||
}
|
||||
|
||||
if (setjmp(png_jmpbuf(this->png_ptr()))) {
|
||||
|
Loading…
Reference in New Issue
Block a user