org.freedesktop.gstreamer.lowlevel.GstNative Maven / Gradle / Ivy
/*
* Copyright (c) 2016 Neil C Smith
* Copyright (c) 2009 Levente Farkas
* Copyright (c) 2007, 2008 Wayne Meissner
*
* This file is part of gstreamer-java.
*
* This code is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License version 3 only, as
* published by the Free Software Foundation.
*
* This code 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
* version 3 for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with this work. If not, see .
*/
package org.freedesktop.gstreamer.lowlevel;
import java.util.HashMap;
import java.util.Map;
import com.sun.jna.Library;
/**
* A convenience wrapper to aid in loading an API interface.
*/
@SuppressWarnings("serial")
public final class GstNative {
// gstreamer library names the files one of libfoo-0.10 and libfoo-1.0
// private static String[] nameFormats = { /*"%s-0.10",*/ "%s-1.0" };
private final static String[] nameFormats =
System.getProperty("gstreamer.GstNative.nameFormats", "%s-1.0").split("\\|");
private GstNative() {}
private static final Map options = new HashMap() {{
put(Library.OPTION_TYPE_MAPPER, new GTypeMapper());
put(Library.OPTION_FUNCTION_MAPPER, new GFunctionMapper());
}};
public static T load(Class interfaceClass) {
return load("gstreamer", interfaceClass);
}
public static T load(String libraryName, Class interfaceClass) {
for (String format : nameFormats)
try {
return GNative.loadLibrary(String.format(format, libraryName), interfaceClass, options);
} catch (UnsatisfiedLinkError ex) {
continue;
}
throw new UnsatisfiedLinkError("Could not load library: " + libraryName);
}
}