in imagepipeline/src/main/java/com/facebook/imagepipeline/producers/WebpTranscodeProducer.java [94:148]
private void transcodeLastResult(
final EncodedImage originalResult,
final Consumer<EncodedImage> consumer,
final ProducerContext producerContext) {
Preconditions.checkNotNull(originalResult);
final EncodedImage encodedImageCopy = EncodedImage.cloneOrNull(originalResult);
final StatefulProducerRunnable<EncodedImage> runnable =
new StatefulProducerRunnable<EncodedImage>(
consumer, producerContext.getProducerListener(), producerContext, PRODUCER_NAME) {
@Override
protected EncodedImage getResult() throws Exception {
PooledByteBufferOutputStream outputStream = mPooledByteBufferFactory.newOutputStream();
try {
// NULLSAFE_FIXME[Parameter Not Nullable]
doTranscode(encodedImageCopy, outputStream);
CloseableReference<PooledByteBuffer> ref =
CloseableReference.of(outputStream.toByteBuffer());
try {
EncodedImage encodedImage = new EncodedImage(ref);
// NULLSAFE_FIXME[Parameter Not Nullable]
encodedImage.copyMetaDataFrom(encodedImageCopy);
return encodedImage;
} finally {
CloseableReference.closeSafely(ref);
}
} finally {
outputStream.close();
}
}
@Override
protected void disposeResult(EncodedImage result) {
EncodedImage.closeSafely(result);
}
@Override
protected void onSuccess(EncodedImage result) {
EncodedImage.closeSafely(encodedImageCopy);
super.onSuccess(result);
}
@Override
protected void onFailure(Exception e) {
EncodedImage.closeSafely(encodedImageCopy);
super.onFailure(e);
}
@Override
protected void onCancellation() {
EncodedImage.closeSafely(encodedImageCopy);
super.onCancellation();
}
};
mExecutor.execute(runnable);
}