in imagepipeline/src/main/java/com/facebook/imagepipeline/producers/DecodeProducer.kt [454:483]
override fun updateDecodeJob(
encodedImage: EncodedImage?,
@Consumer.Status status: Int
): Boolean {
if (encodedImage == null) {
return false
}
val ret = super.updateDecodeJob(encodedImage, status)
if ((isNotLast(status) || statusHasFlag(status, IS_PARTIAL_RESULT)) &&
!statusHasFlag(status, IS_PLACEHOLDER) &&
EncodedImage.isValid(encodedImage) &&
encodedImage.imageFormat === DefaultImageFormats.JPEG) {
if (!this.progressiveJpegParser.parseMoreData(encodedImage)) {
return false
}
val scanNum = this.progressiveJpegParser.bestScanNumber
if (scanNum <= lastScheduledScanNumber) {
// We have already decoded this scan, no need to do so again
return false
}
if (scanNum < progressiveJpegConfig.getNextScanNumberToDecode(lastScheduledScanNumber) &&
!this.progressiveJpegParser.isEndMarkerRead) {
// We have not reached the minimum scan set by the configuration and there
// are still more scans to be read (the end marker is not reached)
return false
}
lastScheduledScanNumber = scanNum
}
return ret
}