package com.bumptech.glide.load.resource.gif; import android.graphics.Bitmap; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.bumptech.glide.gifdecoder.GifDecoder; import com.bumptech.glide.load.engine.bitmap_recycle.ArrayPool; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; /** * Implements {@link com.bumptech.glide.gifdecoder.GifDecoder.BitmapProvider} by wrapping Glide's * {@link com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool}. */ public final class GifBitmapProvider implements GifDecoder.BitmapProvider { private final BitmapPool bitmapPool; @Nullable private final ArrayPool arrayPool; /** * Constructs an instance without a shared byte array pool. Byte arrays will be always constructed * when requested. */ public GifBitmapProvider(BitmapPool bitmapPool) { this(bitmapPool, null /* arrayPool */); } /** * Constructs an instance with a shared array pool. Arrays will be reused where * possible. */ public GifBitmapProvider(BitmapPool bitmapPool, ArrayPool arrayPool) { this.bitmapPool = bitmapPool; this.arrayPool = arrayPool; } @NonNull @Override public Bitmap obtain(int width, int height, Bitmap.Config config) { return bitmapPool.getDirty(width, height, config); } @Override public void release(Bitmap bitmap) { bitmapPool.put(bitmap); } @Override public byte[] obtainByteArray(int size) { if (arrayPool == null) { return new byte[size]; } return arrayPool.get(size, byte[].class); } @SuppressWarnings("PMD.UseVarargs") @Override public void release(byte[] bytes) { if (arrayPool == null) { return; } arrayPool.put(bytes, byte[].class); } @Override public int[] obtainIntArray(int size) { if (arrayPool == null) { return new int[size]; } return arrayPool.get(size, int[].class); } @SuppressWarnings("PMD.UseVarargs") @Override public void release(int[] array) { if (arrayPool == null) { return; } arrayPool.put(array, int[].class); } }