1bcf4a0dae04a4ad14287eeb34069a97c96fe9bb1Sam Juddpackage com.bumptech.glide.load.resource.bitmap; 2fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd 3fcd787c911d5fbca2a34ff0963d4665543a03275Sam Juddimport android.graphics.Bitmap; 4fcd787c911d5fbca2a34ff0963d4665543a03275Sam Juddimport android.media.MediaMetadataRetriever; 5fcd787c911d5fbca2a34ff0963d4665543a03275Sam Juddimport android.os.ParcelFileDescriptor; 69fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; 79fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddimport com.bumptech.glide.load.DecodeFormat; 8fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd 9fcd787c911d5fbca2a34ff0963d4665543a03275Sam Juddimport java.io.IOException; 10fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd 11fcd787c911d5fbca2a34ff0963d4665543a03275Sam Juddpublic class VideoBitmapDecoder implements BitmapDecoder<ParcelFileDescriptor> { 12512fcec1d596928ceac3e63ca80292543c30e82eSam Judd private static final DefaultFactory DEFAULT_FACTORY = new DefaultFactory(); 13512fcec1d596928ceac3e63ca80292543c30e82eSam Judd private MediaMetadataRetrieverFactory factory; 14512fcec1d596928ceac3e63ca80292543c30e82eSam Judd 15512fcec1d596928ceac3e63ca80292543c30e82eSam Judd interface MediaMetadataRetrieverFactory { 16512fcec1d596928ceac3e63ca80292543c30e82eSam Judd public MediaMetadataRetriever build(); 17512fcec1d596928ceac3e63ca80292543c30e82eSam Judd } 18512fcec1d596928ceac3e63ca80292543c30e82eSam Judd 19512fcec1d596928ceac3e63ca80292543c30e82eSam Judd public VideoBitmapDecoder() { 20512fcec1d596928ceac3e63ca80292543c30e82eSam Judd this(DEFAULT_FACTORY); 21512fcec1d596928ceac3e63ca80292543c30e82eSam Judd } 22512fcec1d596928ceac3e63ca80292543c30e82eSam Judd 23512fcec1d596928ceac3e63ca80292543c30e82eSam Judd 24512fcec1d596928ceac3e63ca80292543c30e82eSam Judd VideoBitmapDecoder(MediaMetadataRetrieverFactory factory) { 25512fcec1d596928ceac3e63ca80292543c30e82eSam Judd this.factory = factory; 26512fcec1d596928ceac3e63ca80292543c30e82eSam Judd } 27512fcec1d596928ceac3e63ca80292543c30e82eSam Judd 28fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd @Override 2976fbad3dbce72240e9f5b82c826e3229c1176fb6Sam Judd public Bitmap decode(ParcelFileDescriptor resource, BitmapPool bitmapPool, int outWidth, int outHeight, 3076fbad3dbce72240e9f5b82c826e3229c1176fb6Sam Judd DecodeFormat decodeFormat) 31fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd throws IOException { 32512fcec1d596928ceac3e63ca80292543c30e82eSam Judd MediaMetadataRetriever mediaMetadataRetriever = factory.build(); 33fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd mediaMetadataRetriever.setDataSource(resource.getFileDescriptor()); 34fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd Bitmap result = mediaMetadataRetriever.getFrameAtTime(); 35fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd mediaMetadataRetriever.release(); 36fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd resource.close(); 37fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd return result; 38fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd } 39fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd 40fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd @Override 41fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd public String getId() { 42512fcec1d596928ceac3e63ca80292543c30e82eSam Judd return "VideoBitmapDecoder.com.bumptech.glide.load.resource.bitmap"; 43512fcec1d596928ceac3e63ca80292543c30e82eSam Judd } 44512fcec1d596928ceac3e63ca80292543c30e82eSam Judd 45512fcec1d596928ceac3e63ca80292543c30e82eSam Judd private static class DefaultFactory implements MediaMetadataRetrieverFactory { 46512fcec1d596928ceac3e63ca80292543c30e82eSam Judd @Override 47512fcec1d596928ceac3e63ca80292543c30e82eSam Judd public MediaMetadataRetriever build() { 48512fcec1d596928ceac3e63ca80292543c30e82eSam Judd return new MediaMetadataRetriever(); 49512fcec1d596928ceac3e63ca80292543c30e82eSam Judd } 50fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd } 51fcd787c911d5fbca2a34ff0963d4665543a03275Sam Judd} 52