package org.jcodec.common; import android.graphics.Bitmap; import org.jcodec.common.model.ColorSpace; import org.jcodec.common.model.Picture; import org.jcodec.common.model.Picture8Bit; import org.jcodec.scale.BitmapUtil; import org.jcodec.scale.ColorUtil; import org.jcodec.scale.Transform; import org.jcodec.scale.Transform8Bit; /** * This class is part of JCodec ( www.jcodec.org ) This software is distributed * under FreeBSD License * * @author The JCodec project * */ public class AndroidUtil { private static AndroidUtil inst; private BitmapUtil bitmapUtil; public AndroidUtil(BitmapUtil bitmapUtil) { this.bitmapUtil = bitmapUtil; } private static AndroidUtil inst() { if (inst == null) { inst = new AndroidUtil(new BitmapUtil()); } return inst; } @Deprecated public static Bitmap toBitmap(Picture pic) { return inst().toBitmapImpl(pic); } public static Bitmap toBitmap8Bit(Picture8Bit pic) { return inst().toBitmap8BitImpl(pic); } @Deprecated public static void toBitmap(Picture pic, Bitmap out) { inst().toBitmapImpl(pic, out); } public static void toBitmap8Bit(Picture8Bit pic, Bitmap out) { inst().toBitmap8BitImpl(pic, out); } @Deprecated public static Picture fromBitmap(Bitmap bitmap, ColorSpace colorSpace) { return inst().fromBitmapImpl(bitmap, colorSpace); } public static Picture8Bit fromBitmap8Bit(Bitmap bitmap, ColorSpace colorSpace) { return inst().fromBitmap8BitImpl(bitmap, colorSpace); } public static Picture8Bit fromBitmap8Bit(Bitmap bitmap, VideoEncoder encoder) { return inst().fromBitmap8BitImpl(bitmap, encoder); } @Deprecated public static void fromBitmap(Bitmap bitmap, Picture out) { inst().fromBitmapImpl(bitmap, out); } public static void fromBitmap8Bit(Bitmap bitmap, Picture8Bit out) { inst().fromBitmap8BitImpl(bitmap, out); } @Deprecated public Bitmap toBitmapImpl(Picture pic) { if (pic == null) return null; Transform transform = ColorUtil.getTransform(pic.getColor(), ColorSpace.RGB); Picture rgb = Picture.createCropped(pic.getWidth(), pic.getHeight(), ColorSpace.RGB, pic.getCrop()); transform.transform(pic, rgb); return bitmapUtil.toBitmapImpl(rgb); } public Bitmap toBitmap8BitImpl(Picture8Bit pic) { if (pic == null) return null; Transform8Bit transform = ColorUtil.getTransform8Bit(pic.getColor(), ColorSpace.RGB); Picture8Bit rgb = Picture8Bit.createCropped(pic.getWidth(), pic.getHeight(), ColorSpace.RGB, pic.getCrop()); transform.transform(pic, rgb); return bitmapUtil.toBitmap8BitImpl(rgb); } @Deprecated public void toBitmapImpl(Picture pic, Bitmap out) { if (pic == null) throw new IllegalArgumentException("Input pic is null"); if (out == null) throw new IllegalArgumentException("Out bitmap is null"); Transform transform = ColorUtil.getTransform(pic.getColor(), ColorSpace.RGB); Picture rgb = Picture.createCropped(pic.getWidth(), pic.getHeight(), ColorSpace.RGB, pic.getCrop()); transform.transform(pic, rgb); bitmapUtil.toBitmapImpl(rgb, out); } public void toBitmap8BitImpl(Picture8Bit pic, Bitmap out) { if (pic == null) throw new IllegalArgumentException("Input pic is null"); if (out == null) throw new IllegalArgumentException("Out bitmap is null"); Transform8Bit transform = ColorUtil.getTransform8Bit(pic.getColor(), ColorSpace.RGB); Picture8Bit rgb = Picture8Bit.createCropped(pic.getWidth(), pic.getHeight(), ColorSpace.RGB, pic.getCrop()); transform.transform(pic, rgb); bitmapUtil.toBitmap8BitImpl(rgb, out); } @Deprecated public Picture fromBitmapImpl(Bitmap bitmap, ColorSpace colorSpace) { if (bitmap == null) return null; Picture out = Picture.create(bitmap.getWidth(), bitmap.getHeight(), colorSpace); fromBitmapImpl(bitmap, out); return out; } public Picture8Bit fromBitmap8BitImpl(Bitmap bitmap, ColorSpace colorSpace) { if (bitmap == null) return null; Picture8Bit out = Picture8Bit.create(bitmap.getWidth(), bitmap.getHeight(), colorSpace); fromBitmap8BitImpl(bitmap, out); return out; } public Picture8Bit fromBitmap8BitImpl(Bitmap bitmap, VideoEncoder encoder) { if (bitmap == null) return null; ColorSpace selectedColorSpace = null; for (ColorSpace colorSpace : encoder.getSupportedColorSpaces()) { if (ColorUtil.getTransform8Bit(ColorSpace.RGB, colorSpace) != null) { selectedColorSpace = colorSpace; break; } } if (selectedColorSpace == null) { throw new RuntimeException("Could not find a transform to convert to a codec-supported colorspace."); } Picture8Bit out = Picture8Bit.create(bitmap.getWidth(), bitmap.getHeight(), selectedColorSpace); fromBitmap8BitImpl(bitmap, out); return out; } @Deprecated public void fromBitmapImpl(Bitmap bitmap, Picture out) { if (bitmap == null) throw new IllegalArgumentException("Input pic is null"); if (out == null) throw new IllegalArgumentException("Out bitmap is null"); if (bitmap.getConfig() != Bitmap.Config.ARGB_8888) { throw new RuntimeException("Unsupported bitmap config: " + bitmap.getConfig()); } Picture rgb = bitmapUtil.fromBitmapImpl(bitmap); Transform transform = ColorUtil.getTransform(ColorSpace.RGB, out.getColor()); transform.transform(rgb, out); } public void fromBitmap8BitImpl(Bitmap bitmap, Picture8Bit out) { if (bitmap == null) throw new IllegalArgumentException("Input pic is null"); if (out == null) throw new IllegalArgumentException("Out bitmap is null"); if (bitmap.getConfig() != Bitmap.Config.ARGB_8888) { throw new RuntimeException("Unsupported bitmap config: " + bitmap.getConfig()); } Picture8Bit rgb = bitmapUtil.fromBitmap8BitImpl(bitmap); Transform8Bit transform = ColorUtil.getTransform8Bit(ColorSpace.RGB, out.getColor()); transform.transform(rgb, out); } }