/* * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.imagepipeline.producers; import com.facebook.common.references.CloseableReference; import com.facebook.imagepipeline.image.EncodedImage; import com.facebook.imagepipeline.memory.PooledByteBuffer; /** * Remove image transform meta data producer * * <p>Remove the {@link ImageTransformMetaData} object from the results passed down from the next * producer, and adds it to the result that it returns to the consumer. */ public class RemoveImageTransformMetaDataProducer implements Producer<CloseableReference<PooledByteBuffer>> { private final Producer<EncodedImage> mInputProducer; public RemoveImageTransformMetaDataProducer( Producer<EncodedImage> inputProducer) { mInputProducer = inputProducer; } @Override public void produceResults( Consumer<CloseableReference<PooledByteBuffer>> consumer, ProducerContext context) { mInputProducer.produceResults(new RemoveImageTransformMetaDataConsumer(consumer), context); } private class RemoveImageTransformMetaDataConsumer extends DelegatingConsumer<EncodedImage, CloseableReference<PooledByteBuffer>> { private RemoveImageTransformMetaDataConsumer( Consumer<CloseableReference<PooledByteBuffer>> consumer) { super(consumer); } @Override protected void onNewResultImpl(EncodedImage newResult, boolean isLast) { CloseableReference<PooledByteBuffer> ret = null; try { if (EncodedImage.isValid(newResult)) { ret = newResult.getByteBufferRef(); } getConsumer().onNewResult(ret, isLast); } finally { CloseableReference.closeSafely(ret); } } } }