blob: 3de450f6320dfd959cc58b64fb118489e71bac8a [file] [log] [blame]
package com.bumptech.glide.load;
import com.bumptech.glide.load.engine.Resource;
import java.io.IOException;
/**
* An interface for decoding resources.
*
* @param <T> The type the resource will be decoded from (File, InputStream etc).
* @param <Z> The type of the decoded resource (Bitmap, Drawable etc).
*/
public interface ResourceDecoder<T, Z> {
/**
* Returns a decoded resource from the given data or null if no resource could be decoded.
* <p>
* The {@code source} is managed by the caller, there's no need to close it.
* The returned {@link Resource} will be {@link Resource#recycle() released} when the engine sees fit.
* </p>
* <p>
* Note - The {@code width} and {@code height} arguments are hints only,
* there is no requirement that the decoded resource exactly match the given dimensions.
* A typical use case would be to use the target dimensions to determine
* how much to downsample Bitmaps by to avoid overly large allocations.
* </p>
*
* @param source The data the resource should be decoded from.
* @param width The ideal width in pixels of the decoded resource.
* @param height The ideal height in pixels of the decoded resource.
* @throws IOException
*/
Resource<Z> decode(T source, int width, int height) throws IOException;
/**
* Returns an ID identifying any transformation this decoder may apply to the given data that will be mixed in to
* the cache key.
*
* <p>
* If the decoder does not transform the data in a way that significantly affects the cached
* result (ie performs no downsampling) an empty string is an appropriate id.
* </p>
*/
String getId();
}