diff options
author | Sam Judd <judds@google.com> | 2014-10-12 18:30:27 -0700 |
---|---|---|
committer | Sam Judd <judds@google.com> | 2014-10-12 18:30:27 -0700 |
commit | 8f80ee831ff7b42b72be5f8728a9486fe64c2fa6 (patch) | |
tree | 3c68bed177e5b91e5677fcd7b6885e9d2b284ffa /library/src/main/java/com/bumptech | |
parent | 3c1ebe277614f9e7cb2712892122e74e5e0e2d85 (diff) | |
download | glide-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.java | 21 |
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); |