libbluray | branch: master | hpi1 <[email protected]> | Fri May 10 14:48:21 2013 +0300| [131ed474c7d3d9921dfdd2596641e8cf8425bfaf] | committer: hpi1
J2SE: Added J2ME-compatible BufferedImage. Set libbluray.jar to be first in classpath so that our own implementation is used instead of the one in JVM bootclasspath. > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=131ed474c7d3d9921dfdd2596641e8cf8425bfaf --- src/libbluray/bdj/bdj.c | 2 +- .../bdj/java-j2se/java/awt/BDGraphics.java | 41 ++++++-- src/libbluray/bdj/java-j2se/java/awt/BDImage.java | 4 +- .../java-j2se/java/awt/image/BufferedImage.java | 110 ++++++++++++++++++++ .../java-j2se/sun/awt/image/BufferedImagePeer.java | 46 ++++++++ 5 files changed, 192 insertions(+), 11 deletions(-) diff --git a/src/libbluray/bdj/bdj.c b/src/libbluray/bdj/bdj.c index debdc6c..abbe10e 100644 --- a/src/libbluray/bdj/bdj.c +++ b/src/libbluray/bdj/bdj.c @@ -290,7 +290,7 @@ BDJAVA* bdj_open(const char *path, struct bluray *bd, option[n++].optionString = str_printf("-Dbluray.bindingunit.root=%s", _bdj_buda_root()); option[n++].optionString = str_dup ("-Dawt.toolkit=java.awt.BDToolkit"); - option[n++].optionString = str_printf("-Xbootclasspath/a:%s", _find_libbluray_jar()); + option[n++].optionString = str_printf("-Xbootclasspath/p:%s", _find_libbluray_jar()); option[n++].optionString = str_dup ("-Xms256M"); option[n++].optionString = str_dup ("-Xmx256M"); option[n++].optionString = str_dup ("-Xss2048k"); diff --git a/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java b/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java index 4c61d68..8d47d02 100644 --- a/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java +++ b/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java @@ -86,7 +86,7 @@ class BDGraphics extends Graphics2D implements ConstrainableGraphics { fontMetrics = g.fontMetrics; originX = g.originX; originY = g.originY; - actualClip = g.clip; + actualClip = g.actualClip; clip = g.clip; constrainedRect = g.constrainedRect; if (clip == null) @@ -683,16 +683,12 @@ class BDGraphics extends Graphics2D implements ConstrainableGraphics { if (img instanceof BDImage) { bdImage = (BDImage)img; } else if (img instanceof DVBBufferedImage) { - logger.unimplemented("drawImageN(DVBBufferedImage)"); - //bdImage = (BDImage)getBufferedImagePeer( - // (BufferedImage)(((DVBBufferedImage)img).getImage())); - bdImage = (BDImage)((DVBBufferedImage)img).getImage(); + bdImage = (BDImage)getBufferedImagePeer( + (BufferedImage)(((DVBBufferedImage)img).getImage())); } else if (img instanceof BufferedImage) { - logger.unimplemented("drawImageN(BufferedImage)"); - //bdImage = (BDImage)getBufferedImagePeer((BufferedImage)img); - return false; + bdImage = (BDImage)getBufferedImagePeer((BufferedImage)img); } else { - logger.unimplemented("drawImageN(UNKNOWN)"); + logger.unimplemented("drawImageN: unsupported image type " + img.getClass().getName()); return false; } if (bdImage instanceof BDImageConsumer) { @@ -764,5 +760,32 @@ class BDGraphics extends Graphics2D implements ConstrainableGraphics { return getClass().getName() + "[" + originX + "," + originY + "]"; } + private static Image getBufferedImagePeer(BufferedImage image) { + try { + return (Image)bufferedImagePeer.get(image); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } + + private static Field bufferedImagePeer; + + static { + try { + Class c = Class.forName("java.awt.image.BufferedImage"); + bufferedImagePeer = c.getDeclaredField("peer"); + bufferedImagePeer.setAccessible(true); + } catch (ClassNotFoundException e) { + throw new AWTError("java.awt.image.BufferedImage not found"); + } catch (SecurityException e) { + throw new AWTError("java.awt.image.BufferedImage.peer not accessible"); + } catch (NoSuchFieldException e) { + throw new AWTError("java.awt.image.BufferedImage.peer not found"); + } + } + private static final Logger logger = Logger.getLogger(BDGraphics.class.getName()); } diff --git a/src/libbluray/bdj/java-j2se/java/awt/BDImage.java b/src/libbluray/bdj/java-j2se/java/awt/BDImage.java index e8e048b..4b79d32 100644 --- a/src/libbluray/bdj/java-j2se/java/awt/BDImage.java +++ b/src/libbluray/bdj/java-j2se/java/awt/BDImage.java @@ -19,7 +19,9 @@ package java.awt; -class BDImage extends BDImageBase { +import sun.awt.image.BufferedImagePeer; + +class BDImage extends BDImageBase implements BufferedImagePeer { BDImage(Component component, int width, int height, GraphicsConfiguration gc) { super(component, width, height, gc); } diff --git a/src/libbluray/bdj/java-j2se/java/awt/image/BufferedImage.java b/src/libbluray/bdj/java-j2se/java/awt/image/BufferedImage.java new file mode 100644 index 0000000..afabe91 --- /dev/null +++ b/src/libbluray/bdj/java-j2se/java/awt/image/BufferedImage.java @@ -0,0 +1,110 @@ +/* + * This file is part of libbluray + * Copyright (C) 2012 libbluray + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + */ + +package java.awt.image; + +import sun.awt.image.BufferedImagePeer; +import java.awt.Graphics2D; + +public class BufferedImage extends java.awt.Image +{ + private transient BufferedImagePeer peer; + + public static final int TYPE_INT_ARGB = 2; + + private BufferedImage (BufferedImagePeer peer) { + this.peer = peer; + } + + public Graphics2D createGraphics() { + return (Graphics2D) peer.getGraphics(); + } + + public void flush() { + peer.flush(); + } + + public ColorModel getColorModel() { + return peer.getColorModel(); + } + + public java.awt.Graphics getGraphics() { + return peer.getGraphics(); + } + + public int getHeight() { + return peer.getHeight(); + } + + public int getHeight(ImageObserver observer) { + return peer.getHeight(observer); + } + + public Object getProperty(String name) { + return peer.getProperty(name); + } + + public Object getProperty(String name, ImageObserver observer) { + return peer.getProperty(name, observer); + } + + public String[] getPropertyNames() { + return peer.getPropertyNames(); + } + + public int getRGB(int x, int y) { + return peer.getRGB(x, y); + } + + public int[] getRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize) { + return peer.getRGB(startX, startY, w, h, rgbArray, offset, scansize); + } + + public ImageProducer getSource() { + return peer.getSource(); + } + + public BufferedImage getSubimage(int x, int y, int w, int h) { + return peer.getSubimage(x, y, w, h); + } + + public int getType() { + return peer.getType(); + } + + public int getWidth() { + return peer.getWidth(); + } + + public int getWidth(ImageObserver observer) { + return peer.getWidth(observer); + } + + public synchronized void setRGB(int x, int y, int rgb) { + peer.setRGB(x, y, rgb); + } + + public void setRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize) { + peer.setRGB(startX, startY, w, h, rgbArray, offset, scansize); + } + + public String toString() { + return peer.toString(); + } +} diff --git a/src/libbluray/bdj/java-j2se/sun/awt/image/BufferedImagePeer.java b/src/libbluray/bdj/java-j2se/sun/awt/image/BufferedImagePeer.java new file mode 100644 index 0000000..815a093 --- /dev/null +++ b/src/libbluray/bdj/java-j2se/sun/awt/image/BufferedImagePeer.java @@ -0,0 +1,46 @@ +/* + * This file is part of libbluray + * Copyright (C) 2012 libbluray + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + */ + +package sun.awt.image; + +import java.awt.image.ColorModel; +import java.awt.image.ImageObserver; +import java.awt.image.ImageProducer; +import java.awt.image.BufferedImage; +import java.awt.Graphics; + +public interface BufferedImagePeer { + void flush(); + ColorModel getColorModel(); + Graphics getGraphics(); + int getHeight(); + int getHeight(ImageObserver observer); + Object getProperty(String name); + Object getProperty(String name, ImageObserver observer); + String[] getPropertyNames(); + int getRGB(int x, int y); + int[] getRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize); + ImageProducer getSource(); + BufferedImage getSubimage(int x, int y, int w, int h); + int getType(); + int getWidth(); + int getWidth(ImageObserver observer); + void setRGB(int x, int y, int rgb); + void setRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize); +} _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
