/// <summary> /// bitmap cache get -> /// background thread hand-off -> bitmap cache -> decode -> /// resize and rotate -> (webp transcode) -> data fetch. /// </summary> private IProducer <CloseableReference <CloseableImage> > GetDataFetchSequence() { lock (_gate) { if (_dataFetchSequence == null) { IProducer <EncodedImage> inputProducer = _producerFactory.NewDataFetchProducer(); inputProducer = ProducerFactory.NewAddImageTransformMetaDataProducer(inputProducer); if (!_downsampleEnabled) { inputProducer = _producerFactory.NewResizeAndRotateProducer(inputProducer); } _dataFetchSequence = NewBitmapCacheGetToDecodeSequence(inputProducer); } return(_dataFetchSequence); } }
/// <summary> /// Branch on separate images /// -> thumbnail resize and rotate -> thumbnail producers as provided /// -> local image resize and rotate -> add meta data producer /// </summary> /// <param name="inputProducer"> /// Producer providing the input to add meta data producer. /// </param> /// <param name="thumbnailProducers"> /// The thumbnail producers from which to request the image before /// falling back to the full image producer sequence. /// </param> /// <returns>Local transformations sequence.</returns> private IProducer <EncodedImage> NewLocalTransformationsSequence( IProducer <EncodedImage> inputProducer, IThumbnailProducer <EncodedImage>[] thumbnailProducers) { IProducer <EncodedImage> localImageProducer = ProducerFactory.NewAddImageTransformMetaDataProducer(inputProducer); if (!_downsampleEnabled) { localImageProducer = _producerFactory.NewResizeAndRotateProducer(localImageProducer); } ThrottlingProducer <EncodedImage> localImageThrottlingProducer = _producerFactory.NewThrottlingProducer( _throttlingMaxSimultaneousRequests, localImageProducer); return(ProducerFactory.NewBranchOnSeparateImagesProducer( NewLocalThumbnailProducer(thumbnailProducers), localImageThrottlingProducer)); }
/// <summary> /// multiplex -> encoded cache -> disk cache -> (webp transcode) -> /// network fetch. /// </summary> private IProducer <EncodedImage> GetCommonNetworkFetchToEncodedMemorySequence() { lock (_gate) { if (_commonNetworkFetchToEncodedMemorySequence == null) { IProducer <EncodedImage> inputProducer = NewEncodedCacheMultiplexToTranscodeSequence( _producerFactory.NewNetworkFetchProducer(_networkFetcher)); _commonNetworkFetchToEncodedMemorySequence = ProducerFactory.NewAddImageTransformMetaDataProducer(inputProducer); if (_resizeAndRotateEnabledForNetwork && !_downsampleEnabled) { _commonNetworkFetchToEncodedMemorySequence = _producerFactory.NewResizeAndRotateProducer( _commonNetworkFetchToEncodedMemorySequence); } } return(_commonNetworkFetchToEncodedMemorySequence); } }