blob: 537b185caa55cf0dd1932d43407d018ec8949896 [file] [log] [blame]
package com.bumptech.glide.load.resource.bitmap;
import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.os.ParcelFileDescriptor;
import com.bumptech.glide.load.DecodeFormat;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import java.io.IOException;
/**
* An {@link com.bumptech.glide.load.resource.bitmap.BitmapDecoder} that can decode a thumbnail frame
* {@link Bitmap} from a {@link android.os.ParcelFileDescriptor} containing a video.
*
* @see android.media.MediaMetadataRetriever
*/
public class VideoBitmapDecoder implements BitmapDecoder<ParcelFileDescriptor> {
private static final MediaMetadataRetrieverFactory DEFAULT_FACTORY = new MediaMetadataRetrieverFactory();
private MediaMetadataRetrieverFactory factory;
public VideoBitmapDecoder() {
this(DEFAULT_FACTORY);
}
VideoBitmapDecoder(MediaMetadataRetrieverFactory factory) {
this.factory = factory;
}
@Override
public Bitmap decode(ParcelFileDescriptor resource, BitmapPool bitmapPool, int outWidth, int outHeight,
DecodeFormat decodeFormat)
throws IOException {
MediaMetadataRetriever mediaMetadataRetriever = factory.build();
mediaMetadataRetriever.setDataSource(resource.getFileDescriptor());
Bitmap result = mediaMetadataRetriever.getFrameAtTime();
mediaMetadataRetriever.release();
resource.close();
return result;
}
@Override
public String getId() {
return "VideoBitmapDecoder.com.bumptech.glide.load.resource.bitmap";
}
// Visible for testing.
static class MediaMetadataRetrieverFactory {
public MediaMetadataRetriever build() {
return new MediaMetadataRetriever();
}
}
}