Hello community, here is the log from the commit of package libbluray for openSUSE:Factory checked in at 2019-08-15 12:23:28 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libbluray (Old) and /work/SRC/openSUSE:Factory/.libbluray.new.9556 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libbluray" Thu Aug 15 12:23:28 2019 rev:39 rq:720877 version:1.1.2 Changes: -------- --- /work/SRC/openSUSE:Factory/libbluray/libbluray.changes 2019-04-10 23:10:51.343950714 +0200 +++ /work/SRC/openSUSE:Factory/.libbluray.new.9556/libbluray.changes 2019-08-15 12:23:34.970633396 +0200 @@ -1,0 +2,16 @@ +Sat Aug 03 16:58:13 UTC 2019 - [email protected] + +- Update to version 1.1.2: + + Add libxml version to pkg-config Requires.private. + + Improve support for NetBSD operating system. + + Improve BD-J compability. + + Improve Java 8+ compability. + + Fix main playlist caching in Windows. + + Fix mark triggering when multiple marks are passed during + single read(). + + Fix seek bar pop-up at chapter boundary with some discs. + + Fix reading resources indirectly from mounted .jar file. +- Fixed libbluray-java9.patch. +- Enable build against java-devel >= 10. + +------------------------------------------------------------------- Old: ---- libbluray-1.1.1.tar.bz2 New: ---- libbluray-1.1.2.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libbluray.spec ++++++ --- /var/tmp/diff_new_pack.Fu85nn/_old 2019-08-15 12:23:36.782632944 +0200 +++ /var/tmp/diff_new_pack.Fu85nn/_new 2019-08-15 12:23:36.782632944 +0200 @@ -19,7 +19,7 @@ %define sover 2 Name: libbluray -Version: 1.1.1 +Version: 1.1.2 Release: 0 Summary: Library to access Blu-Ray disk License: LGPL-2.1+ @@ -37,7 +37,6 @@ BuildRequires: pkgconfig(fontconfig) BuildRequires: pkgconfig(freetype2) BuildRequires: pkgconfig(libxml-2.0) >= 2.6 -BuildConflicts: java-devel >= 10 %description This library is written for the purpose of playing Blu-ray movies. It is ++++++ libbluray-1.1.1.tar.bz2 -> libbluray-1.1.2.tar.bz2 ++++++ ++++ 1683 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/ChangeLog new/libbluray-1.1.2/ChangeLog --- old/libbluray-1.1.1/ChangeLog 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/ChangeLog 2019-06-07 20:00:28.000000000 +0200 @@ -1,3 +1,13 @@ +2019-06-07: Version 1.1.2 +- Add libxml version to pkg-config Requires.private. +- Improve support for NetBSD operating system. +- Improve BD-J compability. +- Improve Java 8+ compability. +- Fix main playlist caching in Windows. +- Fix mark triggering when multiple marks are passed during single read(). +- Fix seek bar pop-up at chapter boundary with some discs. +- Fix reading resources indirectly from mounted .jar file. + 2019-04-05: Version 1.1.1 - Enable playback without menus when index.bdmv is missing. - Improve error resilience and stability. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/Makefile.am new/libbluray-1.1.2/Makefile.am --- old/libbluray-1.1.1/Makefile.am 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/Makefile.am 2019-06-07 20:00:28.000000000 +0200 @@ -211,7 +211,8 @@ jni/jni.h \ jni/linux/jni_md.h \ jni/win32/jni_md.h \ - jni/darwin/jni_md.h + jni/darwin/jni_md.h \ + jni/netbsd/jni_md.h pkginclude_HEADERS = \ src/file/filesystem.h \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/configure.ac new/libbluray-1.1.2/configure.ac --- old/libbluray-1.1.1/configure.ac 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/configure.ac 2019-06-07 20:00:28.000000000 +0200 @@ -1,7 +1,7 @@ dnl library version number m4_define([bluray_major], 1) m4_define([bluray_minor], 1) -m4_define([bluray_micro], 1) +m4_define([bluray_micro], 2) m4_define([bluray_version],[bluray_major.bluray_minor.bluray_micro]) dnl shared library version (.so version) @@ -13,7 +13,7 @@ dnl Library file name will be libbluray.so.(current-age).age.revision dnl m4_define([lt_current], 3) -m4_define([lt_revision], 1) +m4_define([lt_revision], 2) m4_define([lt_age], 1) dnl initilization @@ -157,7 +157,7 @@ PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6], [with_libxml2=yes; AC_DEFINE([HAVE_LIBXML2], [1], [Define to 1 if libxml2 is to be used for metadata parsing])]) - PACKAGES="$PACKAGES libxml-2.0" + PACKAGES="$PACKAGES libxml-2.0 >= 2.6" ]) dnl FreeType2 @@ -216,6 +216,7 @@ freebsd*) java_os=freebsd ;; solaris*) java_os=solaris ;; darwin*) java_os=darwin ;; + netbsd*) java_os=netbsd ;; *) java_os=$host_os ;; esac diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/jni/netbsd/jni_md.h new/libbluray-1.1.2/jni/netbsd/jni_md.h --- old/libbluray-1.1.1/jni/netbsd/jni_md.h 1970-01-01 01:00:00.000000000 +0100 +++ new/libbluray-1.1.2/jni/netbsd/jni_md.h 2019-06-07 20:00:28.000000000 +0200 @@ -0,0 +1,54 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is the Java Runtime Interface. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation and Sun Microsystems, Inc. + * Portions created by the Initial Developer are Copyright (C) 1993-1996 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Jean-Baptiste Kempf + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _JNI_MD_H_ +#define _JNI_MD_H_ + +#define JNIEXPORT +#define JNIIMPORT +#define JNICALL + +typedef int jint; +#ifdef __LP64__ +typedef long jlong; +#else +typedef long long jlong; +#endif + +typedef signed char jbyte; + +#endif /* !_JNI_MD_H_ */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/m4/libtool.m4 new/libbluray-1.1.2/m4/libtool.m4 --- old/libbluray-1.1.1/m4/libtool.m4 2019-04-05 10:34:56.000000000 +0200 +++ new/libbluray-1.1.2/m4/libtool.m4 2019-06-07 20:01:00.000000000 +0200 @@ -4063,7 +4063,8 @@ if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&AS_MESSAGE_LOG_FD + if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&AS_MESSAGE_LOG_FD && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" @@ -4703,6 +4704,12 @@ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; + # flang / f18. f95 an alias for gfortran or flang on Debian + flang* | f18* | f95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/bdj/java/java/io/BDFileSystem.java new/libbluray-1.1.2/src/libbluray/bdj/java/java/io/BDFileSystem.java --- old/libbluray-1.1.1/src/libbluray/bdj/java/java/io/BDFileSystem.java 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/src/libbluray/bdj/java/java/io/BDFileSystem.java 2019-06-07 20:00:28.000000000 +0200 @@ -19,6 +19,7 @@ /* * Wrapper for java.io.FileSystem class. * + * - resolve relative files to Xlet home directory. * - replace getBooleanAttributes() for relative paths. * Pretend files exist, if those are in xlet home directory (inside .jar). * No other relative paths are allowed. @@ -40,30 +41,50 @@ public abstract class BDFileSystem extends FileSystem { - private static final Logger logger = Logger.getLogger(BDFileSystem.class.getName()); - - protected final FileSystem fs; + /* + * Access to native filesystem + * + * (for org.videolan.VFSCache, org.videolan.CacheDir) + */ private static FileSystem nativeFileSystem; static { - /* Java 8: getFileSystem() no longer exists on java.io.FileSystem */ try { - nativeFileSystem = (FileSystem)Class.forName("java.io.DefaultFileSystem") - .getDeclaredMethod("getFileSystem", new Class[0]) + /* Java < 8 */ + nativeFileSystem = (FileSystem)FileSystem.class + .getDeclaredMethod("getFileSystem",new Class[0]) .invoke(null, new Object[0]); } catch (Exception e) { try { - nativeFileSystem = (FileSystem)FileSystem.class - .getDeclaredMethod("getFileSystem",new Class[0]) - .invoke(null, new Object[0]); - } catch (Exception t) { - System.err.print("Couldn't find native filesystem: " + t); + /* Just use our wrapper. If it fails, JVM won't be booted anyway ... */ + nativeFileSystem = DefaultFileSystem.getNativeFileSystem(); + } catch (Throwable t) { + System.err.print("Couldn't find native filesystem: " + e); } } } + /* org.videolan.CacheDir uses this function to clean up cache directory */ + public static String[] nativeList(File f) { + return nativeFileSystem.list(f); + } + + /* org.videolan.VFSCache uses this function to check if file has been cached */ + public static boolean nativeFileExists(String path) { + return nativeFileSystem.getBooleanAttributes(new File(path)) != 0; + } + + /* + * Replace File.fs for Xlets (required with Java < 8 where this is not done unconditionally) + * + * (called by org.videolan.BDJClassLoader) + */ + public static void init(final Class c) { + + setBooted(); + AccessController.doPrivileged( new PrivilegedAction() { public Object run() { @@ -79,33 +100,49 @@ filesystem = c.getDeclaredField("fs"); filesystem.setAccessible(true); - /* Java 8: remove "final" modifier from the field */ - Field modifiersField = Field.class.getDeclaredField("modifiers"); - modifiersField.setAccessible(true); - modifiersField.setInt(filesystem, filesystem.getModifiers() & ~Modifier.FINAL); - FileSystem fs = (FileSystem)filesystem.get(null); if (fs instanceof BDFileSystemImpl) { //System.err.print("FileSystem already wrapped"); } else { + /* Java 8: we should never end up here ... */ + /* Java 8: remove "final" modifier from the field */ + //Field modifiersField = Field.class.getDeclaredField("modifiers"); + //modifiersField.setAccessible(true); + //modifiersField.setInt(filesystem, filesystem.getModifiers() & ~Modifier.FINAL); filesystem.set(null, new BDFileSystemImpl(fs)); } } catch (Exception t) { - System.err.print("Hooking FileSystem class failed: " + t); + error("Hooking FileSystem class failed: " + t); } } - public static String[] nativeList(File f) { - return nativeFileSystem.list(f); + /* + * enable after JVM boot is completed + */ + + private static Logger logger = null; + private static boolean booted = false; + + /* Called by org.videolan.Libbluray.initOnce() */ + public static void setBooted() { + if (!booted) { + booted = true; + logger = Logger.getLogger(BDFileSystem.class.getName()); + } } - public static boolean nativeFileExists(String path) { - return nativeFileSystem.getBooleanAttributes(new File(path)) != 0; + private static void error(String msg) { + if (logger != null) { + logger.error(msg); + } } /* + * */ + protected final FileSystem fs; + public BDFileSystem(FileSystem fs) { this.fs = fs; } @@ -139,6 +176,9 @@ } public String resolve(String parent, String child) { + if (!booted) + return fs.resolve(parent, child); + if (parent == null || parent.equals("") || parent.equals(".")) { parent = getHomeDir(); } @@ -168,6 +208,9 @@ } public String resolve(File f) { + if (!booted) + return fs.resolve(f); + if (!f.isAbsolute()) { logger.info("resolve relative file " + f.getPath()); return resolve(BDJXletContext.getCurrentXletHome(), f.getPath()); @@ -182,6 +225,9 @@ } public String canonicalize(String path) throws IOException { + if (!booted) + return fs.canonicalize(path); + String canonPath = fs.canonicalize(path); String cachePath = BDJLoader.getCachedFile(canonPath); if (cachePath != canonPath) { @@ -191,6 +237,9 @@ } public int getBooleanAttributes(File f) { + if (!booted) + return fs.getBooleanAttributes(f); + if (f.isAbsolute()) { return fs.getBooleanAttributes(f); } @@ -217,6 +266,9 @@ } public long getLength(File f) { + if (!booted) + return fs.getLength(f); + if (f.isAbsolute()) { return fs.getLength(f); } @@ -263,7 +315,7 @@ args = new Object[] {(Object)path, (Object)new Boolean(restrictive)}; } } catch (NoSuchMethodException e) { - logger.error("no matching FileSystem.createFileExclusively found !"); + error("no matching FileSystem.createFileExclusively found !"); throw new IOException(); } @@ -272,14 +324,14 @@ Boolean result = (Boolean)m.invoke(fs, args); return result.booleanValue(); } catch (IllegalAccessException e) { - logger.error("" + e); + error("" + e); throw new IOException(); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t instanceof IOException) { throw (IOException)t; } - logger.error("" + t); + error("" + t); throw new IOException(); } } @@ -299,6 +351,8 @@ } public String[] list(File f) { + if (!booted) + return fs.list(f); String path = f.getPath(); String root = System.getProperty("bluray.vfs.root"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/bdj/java/java/io/DefaultFileSystem.java new/libbluray-1.1.2/src/libbluray/bdj/java/java/io/DefaultFileSystem.java --- old/libbluray-1.1.1/src/libbluray/bdj/java/java/io/DefaultFileSystem.java 1970-01-01 01:00:00.000000000 +0100 +++ new/libbluray-1.1.2/src/libbluray/bdj/java/java/io/DefaultFileSystem.java 2019-06-07 20:00:28.000000000 +0200 @@ -0,0 +1,51 @@ +/* + * This file is part of 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.io; + +class DefaultFileSystem { + + static FileSystem getNativeFileSystem() { + Exception e1, e2, e3; + try { + return (FileSystem)Class.forName(System.getProperty("org.videolan.bdj_filesystem")).newInstance(); + } catch (Exception e) { + e3 = e; + } + try { + return (FileSystem)Class.forName("java.io.UnixFileSystem").newInstance(); + } catch (Exception e) { + e1 = e; + } + try { + return (FileSystem)Class.forName("java.io.WinNTFileSystem").newInstance(); + } catch (Exception e) { + e2 = e; + } + + /* No way to recover from here */ + System.err.println("Unsupported native filesystem !\n\t" + e1 + "\n\t" + e2 + "\n\t" + e3); + //Runtime.getRuntime().halt(-1); + throw new Error("No filesystem implementation found"); + } + + public static FileSystem getFileSystem() { + FileSystem nativeFs = getNativeFileSystem(); + return new BDFileSystemImpl(nativeFs); + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/bdj/java/javax/tv/util/TVTimerSpec.java new/libbluray-1.1.2/src/libbluray/bdj/java/javax/tv/util/TVTimerSpec.java --- old/libbluray-1.1.1/src/libbluray/bdj/java/javax/tv/util/TVTimerSpec.java 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/src/libbluray/bdj/java/javax/tv/util/TVTimerSpec.java 2019-06-07 20:00:28.000000000 +0200 @@ -20,11 +20,12 @@ package javax.tv.util; import java.util.Enumeration; +import java.io.Serializable; import java.util.Vector; import org.videolan.Logger; -public class TVTimerSpec +public class TVTimerSpec implements Serializable { private boolean absolute; private boolean regular; @@ -101,4 +102,6 @@ throw new IllegalArgumentException(); this.time = time; } + + private static final long serialVersionUID = -4714470266350436478L; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/bdj/java/org/bluray/ti/selection/TitleContextImpl.java new/libbluray-1.1.2/src/libbluray/bdj/java/org/bluray/ti/selection/TitleContextImpl.java --- old/libbluray-1.1.1/src/libbluray/bdj/java/org/bluray/ti/selection/TitleContextImpl.java 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/src/libbluray/bdj/java/org/bluray/ti/selection/TitleContextImpl.java 2019-06-07 20:00:28.000000000 +0200 @@ -51,6 +51,8 @@ } public ServiceContentHandler[] getServiceContentHandlers() throws SecurityException { + logger.info("getServiceContentHandlers"); + SecurityManager sm = System.getSecurityManager(); if (sm != null) { sm.checkPermission(new ServiceContextPermission("getServiceContentHandlers", "own")); @@ -129,6 +131,8 @@ } public void destroy() throws SecurityException { + logger.info("destroy()"); + SecurityManager sm = System.getSecurityManager(); if (sm != null) { sm.checkPermission(new ServiceContextPermission("stop", "own")); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/bdj/java/org/havi/ui/HBackgroundImage.java new/libbluray-1.1.2/src/libbluray/bdj/java/org/havi/ui/HBackgroundImage.java --- old/libbluray-1.1.1/src/libbluray/bdj/java/org/havi/ui/HBackgroundImage.java 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/src/libbluray/bdj/java/org/havi/ui/HBackgroundImage.java 2019-06-07 20:00:28.000000000 +0200 @@ -22,21 +22,15 @@ import java.awt.Image; import java.awt.Toolkit; import java.awt.image.ImageObserver; -import java.awt.image.ImageProducer; import java.net.URL; import java.util.ArrayList; import org.havi.ui.event.HBackgroundImageEvent; import org.havi.ui.event.HBackgroundImageListener; -import sun.awt.image.ByteArrayImageSource; -import sun.awt.image.FileImageSource; -import sun.awt.image.URLImageSource; - public class HBackgroundImage implements ImageObserver { public HBackgroundImage(String filename) { - producer = new FileImageSource(filename); - img = Toolkit.getDefaultToolkit().createImage(producer); + img = Toolkit.getDefaultToolkit().createImage(filename); } public HBackgroundImage(byte pixels[]) { @@ -44,13 +38,11 @@ System.err.println("null pixels from " + org.videolan.Logger.dumpStack()); return; } - producer = new ByteArrayImageSource(pixels); - img = Toolkit.getDefaultToolkit().createImage(producer); + img = Toolkit.getDefaultToolkit().createImage(pixels, 0, pixels.length); } public HBackgroundImage(URL contents) { - producer = new URLImageSource(contents); - img = Toolkit.getDefaultToolkit().createImage(producer); + img = Toolkit.getDefaultToolkit().createImage(contents); } public void load(HBackgroundImageListener listener) { @@ -111,7 +103,6 @@ } } - private ImageProducer producer; private Image img; private ArrayList listeners = new ArrayList(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/bdj/java/org/videolan/BDJClassLoader.java new/libbluray-1.1.2/src/libbluray/bdj/java/org/videolan/BDJClassLoader.java --- old/libbluray-1.1.1/src/libbluray/bdj/java/org/videolan/BDJClassLoader.java 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/src/libbluray/bdj/java/org/videolan/BDJClassLoader.java 2019-06-07 20:00:28.000000000 +0200 @@ -280,8 +280,11 @@ } public URL getResource(String name) { + URL url; name = name.replace('\\', '/'); - return super.getResource(name); + url = super.getResource(name); + logger.info("getResource(" + name + ") --> " + url); + return url; } /* final in J2ME @@ -292,8 +295,11 @@ */ public URL findResource(String name) { + URL url; name = name.replace('\\', '/'); - return super.findResource(name); + url = super.findResource(name); + logger.info("findResource(" + name + ") --> " + url); + return url; } public Enumeration findResources(String name) throws IOException { @@ -302,8 +308,13 @@ } public InputStream getResourceAsStream(String name) { + InputStream is; name = name.replace('\\', '/'); - return super.getResourceAsStream(name); + is = super.getResourceAsStream(name); + if (is == null) { + logger.info("getResourceAsStream(" + name + ") failed"); + } + return is; } private String xletClass; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/bdj/java/org/videolan/BDJSecurityManager.java new/libbluray-1.1.2/src/libbluray/bdj/java/org/videolan/BDJSecurityManager.java --- old/libbluray-1.1.1/src/libbluray/bdj/java/org/videolan/BDJSecurityManager.java 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/src/libbluray/bdj/java/org/videolan/BDJSecurityManager.java 2019-06-07 20:00:28.000000000 +0200 @@ -121,7 +121,9 @@ if (perm.getActions().equals("read")) { String prop = perm.getName(); if (prop.startsWith("bluray.") || prop.startsWith("dvb.") || prop.startsWith("mhp.") || prop.startsWith("aacs.")) { - //logger.info(perm + " granted"); + return; + } + if (prop.equals("dolbyvision.graphicspriority.available")) { return; } if (prop.startsWith("user.dir")) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/bdj/java/org/videolan/Libbluray.java new/libbluray-1.1.2/src/libbluray/bdj/java/org/videolan/Libbluray.java --- old/libbluray-1.1.1/src/libbluray/bdj/java/org/videolan/Libbluray.java 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/src/libbluray/bdj/java/org/videolan/Libbluray.java 2019-06-07 20:00:28.000000000 +0200 @@ -138,6 +138,9 @@ } catch (Throwable t) { System.err.println("Hooking socket factory failed: " + t + "\n" + Logger.dumpStack(t)); } + + /* enable filesystem hooks */ + java.io.BDFileSystem.setBooted(); } private static String canonicalize(String path, boolean create) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/bdj/java/org/videolan/media/content/playlist/Handler.java new/libbluray-1.1.2/src/libbluray/bdj/java/org/videolan/media/content/playlist/Handler.java --- old/libbluray-1.1.1/src/libbluray/bdj/java/org/videolan/media/content/playlist/Handler.java 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/src/libbluray/bdj/java/org/videolan/media/content/playlist/Handler.java 2019-06-07 20:00:28.000000000 +0200 @@ -253,15 +253,40 @@ } } - protected void doChapterReached(int param) { - ((PlaybackControlImpl)controls[9]).onChapterReach(param); + BDLocator lastMarkLocator = null; + protected void doChapterReached(int chapter) { + if (chapter <= 0) + return; + chapter--; + synchronized (this) { + if (pi == null) + return; + org.videolan.TIMark[] marks = pi.getMarks(); + if (marks == null) + return; + for (int i = 0, j = 0; i < marks.length; i++) { + if (marks[i].getType() == org.videolan.TIMark.MARK_TYPE_ENTRY) { + if (j == chapter) { + if (currentLocator == null || lastMarkLocator != currentLocator || i != currentLocator.getMarkId()) { + ((PlaybackControlImpl)controls[9]).onMarkReach(i); + } + return; + } + j++; + } + } + } } protected void doMarkReached(int param) { + synchronized (this) { ((PlaybackControlImpl)controls[9]).onMarkReach(param); if (currentLocator != null) currentLocator.setMarkId(param); + + lastMarkLocator = currentLocator; + } } protected void doPlaylistStarted(int param) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/bdj/java/org/videolan/media/content/playlist/PlaybackControlImpl.java new/libbluray-1.1.2/src/libbluray/bdj/java/org/videolan/media/content/playlist/PlaybackControlImpl.java --- old/libbluray-1.1.1/src/libbluray/bdj/java/org/videolan/media/content/playlist/PlaybackControlImpl.java 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/src/libbluray/bdj/java/org/videolan/media/content/playlist/PlaybackControlImpl.java 2019-06-07 20:00:28.000000000 +0200 @@ -95,27 +95,6 @@ player.seekPlayItem(item); } - protected void onChapterReach(int chapter) { - if (chapter <= 0) - return; - chapter--; - PlaylistInfo pi = player.getPlaylistInfo(); - if (pi == null) - return; - TIMark[] marks = pi.getMarks(); - if (marks == null) - return; - for (int i = 0, j = 0; i < marks.length; i++) { - if (marks[i].getType() == TIMark.MARK_TYPE_ENTRY) { - if (j == chapter) { - notifyListeners(new PlaybackMarkEvent(this, i)); - return; - } - j++; - } - } - } - protected void onMarkReach(int mark) { if (mark < 0) { return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/bdj/java-j2se/java/io/FileInputStream.java new/libbluray-1.1.2/src/libbluray/bdj/java-j2se/java/io/FileInputStream.java --- old/libbluray-1.1.1/src/libbluray/bdj/java-j2se/java/io/FileInputStream.java 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/src/libbluray/bdj/java-j2se/java/io/FileInputStream.java 2019-06-07 20:00:28.000000000 +0200 @@ -23,6 +23,7 @@ import org.videolan.BDJLoader; import org.videolan.BDJXletContext; import org.videolan.Logger; +import org.videolan.MountManager; public class FileInputStream extends InputStream { @@ -38,6 +39,27 @@ public FileInputStream(File file) throws FileNotFoundException { String name = file != null ? file.getPath() : null; + /* Resolve resource urls obtained from URL.getPath(). */ + /* Ex. Aeon Flux, Petit Prince: file:/tmp/libbluray-bdj-cache/100d22e59d6d4/VFSCache/BDMV/JAR/00001.jar!/menu.bin */ + if (name != null && name.startsWith("file:")) { + int idx; + if ((idx = name.indexOf(".jar!/")) > 0 || (idx = name.indexOf(".jar!\\")) > 0) { + try { + String mountPoint = MountManager.getMount(Integer.parseInt(name.substring(idx - 5, idx))); + if (mountPoint != null) { + name = mountPoint + name.substring(idx + 5); + getLogger().info("Fixing invalid resource url " + file + " --> " + name); + file = new File(name); + } + } catch (Exception e) { + getLogger().error("" + e); + } + } + if (name.startsWith("file:")) { + System.err.println("ERROR: unresolved URL in FileInputStream: " + name); + } + } + SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkRead(name); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/bluray-version.h new/libbluray-1.1.2/src/libbluray/bluray-version.h --- old/libbluray-1.1.1/src/libbluray/bluray-version.h 2019-04-05 10:35:15.000000000 +0200 +++ new/libbluray-1.1.2/src/libbluray/bluray-version.h 2019-06-07 20:02:18.000000000 +0200 @@ -27,9 +27,9 @@ #define BLURAY_VERSION_MAJOR 1 #define BLURAY_VERSION_MINOR 1 -#define BLURAY_VERSION_MICRO 1 +#define BLURAY_VERSION_MICRO 2 -#define BLURAY_VERSION_STRING "1.1.1" +#define BLURAY_VERSION_STRING "1.1.2" #define BLURAY_VERSION \ BLURAY_VERSION_CODE(BLURAY_VERSION_MAJOR, BLURAY_VERSION_MINOR, BLURAY_VERSION_MICRO) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/bluray.c new/libbluray-1.1.2/src/libbluray/bluray.c --- old/libbluray-1.1.1/src/libbluray/bluray.c 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/src/libbluray/bluray.c 2019-06-07 20:00:28.000000000 +0200 @@ -1579,19 +1579,23 @@ static void _playmark_reached(BLURAY *bd) { - BD_DEBUG(DBG_BLURAY, "PlayMark %d reached (%"PRIu64")\n", bd->next_mark, bd->next_mark_pos); + while (bd->next_mark >= 0 && bd->s_pos > bd->next_mark_pos) { - _queue_event(bd, BD_EVENT_PLAYMARK, bd->next_mark); - _bdj_event(bd, BDJ_EVENT_MARK, bd->next_mark); + BD_DEBUG(DBG_BLURAY, "PlayMark %d reached (%"PRIu64")\n", bd->next_mark, bd->next_mark_pos); - /* update next mark */ - bd->next_mark++; - if ((unsigned)bd->next_mark < bd->title->mark_list.count) { - bd->next_mark_pos = (uint64_t)bd->title->mark_list.mark[bd->next_mark].title_pkt * 192L; - } else { - bd->next_mark = -1; - bd->next_mark_pos = (uint64_t)-1; - } + _queue_event(bd, BD_EVENT_PLAYMARK, bd->next_mark); + _bdj_event(bd, BDJ_EVENT_MARK, bd->next_mark); + + /* update next mark */ + bd->next_mark++; + if ((unsigned)bd->next_mark < bd->title->mark_list.count) { + bd->next_mark_pos = (uint64_t)bd->title->mark_list.mark[bd->next_mark].title_pkt * 192L; + } else { + /* no marks left */ + bd->next_mark = -1; + bd->next_mark_pos = (uint64_t)-1; + } + }; /* chapter tracking */ _update_chapter_psr(bd); @@ -1908,19 +1912,7 @@ static int _bd_read(BLURAY *bd, unsigned char *buf, int len) { BD_STREAM *st = &bd->st0; - int out_len; - - if (st->fp) { - out_len = 0; - BD_DEBUG(DBG_STREAM, "Reading [%d bytes] at %"PRIu64"...\n", len, bd->s_pos); - - if (st->clip == NULL) { - // We previously reached the last clip. Nothing - // else to read. - _queue_event(bd, BD_EVENT_END_OF_TITLE, 0); - bd->end_of_playlist |= 1; - return 0; - } + int out_len = 0; while (len > 0) { uint32_t clip_pkt; @@ -2054,18 +2046,38 @@ bd->s_pos += size; } - /* mark tracking */ - if (bd->next_mark >= 0 && bd->s_pos > bd->next_mark_pos) { - _playmark_reached(bd); - } - BD_DEBUG(DBG_STREAM, "%d bytes read OK!\n", out_len); return out_len; +} + +static int _bd_read_locked(BLURAY *bd, unsigned char *buf, int len) +{ + BD_STREAM *st = &bd->st0; + int r; + + if (!st->fp) { + BD_DEBUG(DBG_STREAM | DBG_CRIT, "bd_read(): no valid title selected!\n"); + return -1; } - BD_DEBUG(DBG_STREAM | DBG_CRIT, "bd_read(): no valid title selected!\n"); + if (st->clip == NULL) { + // We previously reached the last clip. Nothing + // else to read. + _queue_event(bd, BD_EVENT_END_OF_TITLE, 0); + bd->end_of_playlist |= 1; + return 0; + } + + BD_DEBUG(DBG_STREAM, "Reading [%d bytes] at %"PRIu64"...\n", len, bd->s_pos); + + r = _bd_read(bd, buf, len); + + /* mark tracking */ + if (bd->next_mark >= 0 && bd->s_pos > bd->next_mark_pos) { + _playmark_reached(bd); + } - return -1; + return r; } int bd_read(BLURAY *bd, unsigned char *buf, int len) @@ -2073,7 +2085,7 @@ int result; bd_mutex_lock(&bd->mutex); - result = _bd_read(bd, buf, len); + result = _bd_read_locked(bd, buf, len); bd_mutex_unlock(&bd->mutex); return result; @@ -3544,7 +3556,7 @@ } } - int bytes = _bd_read(bd, buf, len); + int bytes = _bd_read_locked(bd, buf, len); if (bytes == 0) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libbluray-1.1.1/src/libbluray/disc/properties.c new/libbluray-1.1.2/src/libbluray/disc/properties.c --- old/libbluray-1.1.1/src/libbluray/disc/properties.c 2019-04-05 10:34:16.000000000 +0200 +++ new/libbluray-1.1.2/src/libbluray/disc/properties.c 2019-06-07 20:00:28.000000000 +0200 @@ -60,7 +60,7 @@ return 0; } - fp = file_open(file, "rt"); + fp = file_open(file, "rb"); if (!fp) { goto unlink; } @@ -114,7 +114,7 @@ return -1; } - fp = file_open(file, "wt"); + fp = file_open(file, "wb"); if (!fp) { return -1; } ++++++ libbluray-java9.patch ++++++ --- /var/tmp/diff_new_pack.Fu85nn/_old 2019-08-15 12:23:37.998632640 +0200 +++ /var/tmp/diff_new_pack.Fu85nn/_new 2019-08-15 12:23:37.998632640 +0200 @@ -1,51 +1,29 @@ ---- libbluray-1.0.1/src/libbluray/bdj/build.xml 2017-03-02 14:33:49.000000000 +0100 -+++ libbluray-1.0.1/src/libbluray/bdj/build.xml 2017-10-30 08:32:10.295848485 +0100 -@@ -8,7 +8,6 @@ +--- libbluray-1.1.2/src/libbluray/bdj/build.xml.orig 2019-08-03 18:40:05.427564607 +0200 ++++ libbluray-1.1.2/src/libbluray/bdj/build.xml 2019-08-03 18:40:05.451564195 +0200 +@@ -8,10 +8,9 @@ <property name="dist" location="../../.libs"/> <property name="src_awt" value=""/> <property name="src_asm" value="../../../contrib/asm/src/"/> - <property name="bootclasspath" value=""/> <property name="version" value=""/> +- <property name="java_version_asm" value="1.5"/> +- <property name="java_version_bdj" value="1.4"/> ++ <property name="java_version_asm" value="1.6"/> ++ <property name="java_version_bdj" value="1.6"/> <target name="init"> -@@ -20,14 +19,12 @@ + <tstamp/> +@@ -22,13 +21,11 @@ <target name="compile" depends="init" description="compile the source " > <javac srcdir="${src_asm}" destdir="${build}" debug="yes" - bootclasspath="${bootclasspath}" -- source="1.5" target="1.5"> -+ source="1.6" target="1.6"> + source="${java_version_asm}" target="${java_version_asm}"> <compilerarg value="-XDignore.symbol.file"/> <compilerarg value="-Xlint:-deprecation"/> </javac> <javac srcdir="${src}${src_awt}" destdir="${build}" debug="yes" - bootclasspath="${bootclasspath}" -- source="1.4" target="1.4"> -+ source="1.6" target="1.6"> + source="${java_version_bdj}" target="${java_version_bdj}"> <compilerarg value="-XDignore.symbol.file"/> <compilerarg value="-Xlint:-deprecation"/> - </javac> ---- libbluray-1.0.1/src/libbluray/bdj/java-j2se/java/io/BDFileSystemImpl.java -+++ libbluray-1.0.1/src/libbluray/bdj/java-j2se/java/io/BDFileSystemImpl.java -@@ -38,4 +38,9 @@ class BDFileSystemImpl extends BDFileSystem { - public long getSpace(File f, int t) { - return fs.getSpace(f, t); - } -+ -+ /* Java 9 */ -+ public int getNameMax(String path) { -+ return 255; -+ } - } - ---- libbluray-1.0.1/src/libbluray/bdj/java-j2se/java/awt/peer/BDFramePeer.java 2017-03-02 14:33:49.000000000 +0100 -+++ libbluray-1.0.1/src/libbluray/bdj/java-j2se/java/awt/peer/BDFramePeer.java 2017-10-30 09:08:08.259034704 +0100 -@@ -173,7 +173,7 @@ - return ((BDToolkit)BDToolkit.getDefaultToolkit()).createImage((Component)null, width, height); - } - -- public boolean requestFocus(Component c, boolean a, boolean b, long l, sun.awt.CausedFocusEvent.Cause d) { -+ public boolean requestFocus(Component c, boolean a, boolean b, long l, FocusEvent.Cause d) { - if (c == null) { - return true; - }
