| package com.bumptech.glide.load.resource.bitmap; |
| |
| import android.graphics.Bitmap; |
| import android.os.ParcelFileDescriptor; |
| import android.util.Log; |
| |
| import com.bumptech.glide.load.ResourceDecoder; |
| import com.bumptech.glide.load.engine.Resource; |
| import com.bumptech.glide.load.model.ImageVideoWrapper; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| |
| /** |
| * A {@link ResourceDecoder} that decodes {@link ImageVideoWrapper}s using |
| * a wrapped {@link ResourceDecoder} for {@link InputStream}s |
| * and a wrapped {@link ResourceDecoder} for {@link ParcelFileDescriptor}s. |
| * The {@link InputStream} data in the {@link ImageVideoWrapper} is always preferred. |
| */ |
| public class ImageVideoBitmapDecoder implements ResourceDecoder<ImageVideoWrapper, Bitmap> { |
| private static final String TAG = "ImageVideoDecoder"; |
| private final ResourceDecoder<InputStream, Bitmap> streamDecoder; |
| private final ResourceDecoder<ParcelFileDescriptor, Bitmap> fileDescriptorDecoder; |
| |
| public ImageVideoBitmapDecoder(ResourceDecoder<InputStream, Bitmap> streamDecoder, |
| ResourceDecoder<ParcelFileDescriptor, Bitmap> fileDescriptorDecoder) { |
| this.streamDecoder = streamDecoder; |
| this.fileDescriptorDecoder = fileDescriptorDecoder; |
| } |
| |
| @SuppressWarnings("resource") |
| // @see ResourceDecoder.decode |
| @Override |
| public Resource<Bitmap> decode(ImageVideoWrapper source, int width, int height) throws IOException { |
| Resource<Bitmap> result = null; |
| InputStream is = source.getStream(); |
| if (is != null) { |
| try { |
| result = streamDecoder.decode(is, width, height); |
| } catch (IOException e) { |
| if (Log.isLoggable(TAG, Log.VERBOSE)) { |
| Log.v(TAG, "Failed to load image from stream, trying FileDescriptor", e); |
| } |
| } |
| } |
| |
| if (result == null) { |
| ParcelFileDescriptor fileDescriptor = source.getFileDescriptor(); |
| if (fileDescriptor != null) { |
| result = fileDescriptorDecoder.decode(fileDescriptor, width, height); |
| } |
| } |
| return result; |
| } |
| |
| @Override |
| public String getId() { |
| return "ImageVideoBitmapDecoder.com.bumptech.glide.load.resource.bitmap"; |
| } |
| } |