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