/* GStreamerMixer.java -- Mixer implementation. Copyright (C) 2007 Free Software Foundation, Inc. This file is part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath 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 General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ package gnu.javax.sound.sampled.gstreamer; import gnu.javax.sound.sampled.gstreamer.lines.GstSourceDataLine; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.Control; import javax.sound.sampled.DataLine; import javax.sound.sampled.Line; import javax.sound.sampled.LineListener; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.Mixer; import javax.sound.sampled.SourceDataLine; import javax.sound.sampled.Control.Type; /** * @author Mario Torre <neugens@limasoftware.net> */ public class GStreamerMixer implements Mixer { public static class GstInfo extends Info { /* Mixer Properties */ /** Name */ private static final String name = "Classpath GStreamer Sound Audio Engine"; /** Vendor */ private static final String vendor = "GNU Classpath"; /** Description */ private static final String desc = "GStreamer-based software mixer"; /** Version */ private static final String vers = "0.0.1"; protected GstInfo() { super(name, vendor, desc, vers); } } public static final String GST_BACKEND = GstInfo.name; public static final String GST_DECODER = "decoder"; public static final String GST_TYPE_NAME = "type"; public static final String GST_FILE_EXTENSION = "ext"; /** Mixer Info */ private static final Mixer.Info INFO = new GStreamerMixer.GstInfo(); public Line getLine(Line.Info info) throws LineUnavailableException { // get all the lines formats supported by this mixer and // and see if there is one matching the given line // if the format comes from the gstreamer backend // gstreamer will be able to deal with it Class clazz = info.getLineClass(); DataLine.Info _info = (DataLine.Info) info; if (clazz == SourceDataLine.class) { for (AudioFormat format : _info.getFormats()) { // see if we are a gstreamer child :) if (format.properties().containsKey(GST_BACKEND)); { // we got it return new GstSourceDataLine(format); } } } // TODO: we also support basic PCM throw new LineUnavailableException("Cannot open a line"); } public int getMaxLines(Line.Info info) { // TODO return 1; } public Info getMixerInfo() { return INFO; } public javax.sound.sampled.Line.Info[] getSourceLineInfo() { // TODO Auto-generated method stub return null; } public Line.Info[] getSourceLineInfo(Line.Info info) { // TODO Auto-generated method stub return null; } public Line[] getSourceLines() { // TODO Auto-generated method stub return null; } public javax.sound.sampled.Line.Info[] getTargetLineInfo() { // TODO Auto-generated method stub return null; } public Line.Info[] getTargetLineInfo(Line.Info info) { // TODO Auto-generated method stub return null; } public Line[] getTargetLines() { // TODO Auto-generated method stub return null; } public boolean isLineSupported(Line.Info info) { // We support any kind of mixer that comes // from our gstreamer backend. // In addition, we support PCM based audio streams for // direct playback. if (info instanceof DataLine.Info) { DataLine.Info _dinfo = (DataLine.Info) info; _dinfo.getFormats(); } return true; } public boolean isSynchronizationSupported(Line[] lines, boolean sync) { // TODO Auto-generated method stub return false; } public void synchronize(Line[] lines, boolean sync) { // TODO Auto-generated method stub } public void unsynchronize(Line[] lines) { // TODO Auto-generated method stub } public void addLineListener(LineListener listener) { // TODO Auto-generated method stub } public void close() { // TODO Auto-generated method stub } public Control getControl(Type what) { // TODO Auto-generated method stub return null; } public Control[] getControls() { // TODO Auto-generated method stub return null; } public javax.sound.sampled.Line.Info getLineInfo() { // TODO Auto-generated method stub return null; } public boolean isControlSupported(Type what) { // TODO Auto-generated method stub return false; } public boolean isOpen() { // TODO Auto-generated method stub return false; } public void open() throws LineUnavailableException { // TODO Auto-generated method stub } public void removeLineListener(LineListener listener) { // TODO Auto-generated method stub } }