aboutsummaryrefslogtreecommitdiff
path: root/library/src/main/java/com/bumptech
diff options
context:
space:
mode:
authorSam Judd <judds@google.com>2014-10-12 18:30:27 -0700
committerSam Judd <judds@google.com>2014-10-12 18:30:27 -0700
commit8f80ee831ff7b42b72be5f8728a9486fe64c2fa6 (patch)
tree3c68bed177e5b91e5677fcd7b6885e9d2b284ffa /library/src/main/java/com/bumptech
parent3c1ebe277614f9e7cb2712892122e74e5e0e2d85 (diff)
downloadglide-8f80ee831ff7b42b72be5f8728a9486fe64c2fa6.tar.gz
Skip AnimatedGifEncoder for original GIFs.
Fixes #184.
Diffstat (limited to 'library/src/main/java/com/bumptech')
-rw-r--r--library/src/main/java/com/bumptech/glide/load/resource/gif/GifResourceEncoder.java21
1 files changed, 20 insertions, 1 deletions
diff --git a/library/src/main/java/com/bumptech/glide/load/resource/gif/GifResourceEncoder.java b/library/src/main/java/com/bumptech/glide/load/resource/gif/GifResourceEncoder.java
index edccbeca..ab2e14c6 100644
--- a/library/src/main/java/com/bumptech/glide/load/resource/gif/GifResourceEncoder.java
+++ b/library/src/main/java/com/bumptech/glide/load/resource/gif/GifResourceEncoder.java
@@ -10,9 +10,11 @@ import com.bumptech.glide.load.ResourceEncoder;
import com.bumptech.glide.load.Transformation;
import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
+import com.bumptech.glide.load.resource.UnitTransformation;
import com.bumptech.glide.load.resource.bitmap.BitmapResource;
import com.bumptech.glide.util.LogTime;
+import java.io.IOException;
import java.io.OutputStream;
/**
@@ -42,6 +44,11 @@ public class GifResourceEncoder implements ResourceEncoder<GifDrawable> {
long startTime = LogTime.getLogTime();
GifDrawable drawable = resource.get();
+ Transformation<Bitmap> transformation = drawable.getFrameTransformation();
+ if (transformation instanceof UnitTransformation) {
+ return writeDataDirect(drawable.getData(), os);
+ }
+
GifDecoder decoder = decodeHeaders(drawable.getData());
AnimatedGifEncoder encoder = factory.buildEncoder();
@@ -49,7 +56,6 @@ public class GifResourceEncoder implements ResourceEncoder<GifDrawable> {
return false;
}
- Transformation<Bitmap> transformation = drawable.getFrameTransformation();
for (int i = 0; i < decoder.getFrameCount(); i++) {
Bitmap currentFrame = decoder.getNextFrame();
Resource<Bitmap> transformedResource = getTransformedFrame(currentFrame, transformation, drawable);
@@ -77,6 +83,19 @@ public class GifResourceEncoder implements ResourceEncoder<GifDrawable> {
return result;
}
+ private boolean writeDataDirect(byte[] data, OutputStream os) {
+ boolean success = true;
+ try {
+ os.write(data);
+ } catch (IOException e) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Failed to write data to output stream in GifResourceEncoder", e);
+ }
+ success = false;
+ }
+ return success;
+ }
+
private GifDecoder decodeHeaders(byte[] data) {
GifHeaderParser parser = factory.buildParser();
parser.setData(data);