/*
* @(#)Multiplexer.java 1.24 02/08/21
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved.
*/
package javax.media;
import javax.media.format.*;
import javax.media.protocol.*;
/**
* A <code>Multiplexer</code> is a media processing unit takes input data from multiple tracks,
* combines the data into an interleaved container format, then outputs the
* interleaved data through an output <code>DataSource</code>.
* It typically has multiple inputs and one output.
*
* A <CODE>Multiplexer</CODE> can also have a single track as input. In this case,
* multiple tracks don't have to be interleaved, but the <CODE>Multiplexer</CODE>
* might format the output stream with additional data interleaved with the input track.
* <p>
* If a <code>Multiplexer</code> implements the <code>Clock</code> interface,
* it can be used by a <code>Player</code> as
* the master time base for synchronization. In this case, the
* <code>Multiplexer</code> should update the media time and time-base time as
* it processes the media.
* @since JMF 2.0
*/
public interface Multiplexer extends javax.media.PlugIn {
/**
* Lists the output content-descriptors that this <CODE>Multiplexer</CODE> supports.
* @ param inputs An array of the formats of the data to be input to the <CODE>Multiplexer</CODE>.
* If <code>inputs</code> is non-null, then this method lists the
* output content descriptors supported when the input data is in the specified
* formats. If <code>inputs</code> is null, this method lists
* all of the output content descriptors that this <CODE>Multiplexer</CODE> supports.
& @ return An array of the content descriptors supported by this <CODE>Multiplexer</CODE>.
*/
public ContentDescriptor[] getSupportedOutputContentDescriptors(Format inputs[]);
/**
* Returns the input formats that this <CODE>Multiplexer</CODE> supports. The <CODE>Format</CODE> objects
* that are returned might be loosely defined. In this case, <code>setInputFormat</code>
* should be called with a more specific <CODE>Format</CODE> to make sure that the desired
* <CODE>Format</CODE> is supported by this <CODE>Multiplexer</CODE>.
* @return An array of <CODE>Format</CODE> objects. If no formats are supported, then
* an array of size zero is returned.
*/
public Format [] getSupportedInputFormats();
/**
* Sets the number of input tracks that the <CODE>Multiplexer</CODE> can expect
* to find in the input stream.
* @param numTracks The number of input tracks that the input stream contains.
* @return The number of input tracks actually set. This
* might be less than the number of tracks specified. If the number specified exceeds
* the number of tracks that the <CODE>Multiplexer</CODE> can handle, this
* method returns the maximum number
* of tracks supported by the <CODE>Multiplexer</CODE>.
*
*/
public int setNumTracks(int numTracks);
/**
* Sets the input <CODE>Format</CODE> for the specified track.
* @param format The input <CODE>Format</CODE> of the specified track.
* @param trackID The index number of the track for which the <CODE>Format</CODE> is being set.
* @return The <CODE>Format</CODE> preferred by the <CODE>Multiplexer</CODE>.
* This might the same as the specified <CODE>Format</CODE>, a more well-defined <CODE>Format</CODE>
* than was specified, or null if the specified <CODE>Format</CODE> is not supported by the
* <CODE>Multiplexer</CODE> at all.
*/
public Format setInputFormat(Format format, int trackID);
/**
* Processes the input <CODE>Buffer</CODE> and multiplexes it with data from other
* tracks. The multiplexed output is sent to an output
* <code>DataSource</code>.
* @param buffer The <CODE>Buffer</CODE> of data to process.
* @param trackID The index number of the track to which the input <CODE>Buffer</CODE>
* belongs.
* @return <CODE>BUFFER_PROCESSED_OK</CODE> If the processing is successful. Other
* possible return codes are defined in <CODE>PlugIn</CODE>.
* @see PlugIn
*/
public int process(Buffer buffer, int trackID);
/**
* Gets the output <code>DataSource</code> from this <CODE>Multiplexer</CODE>.
* The <CODE>DataSource</CODE> is returned in the connected state.
* The returned <CODE>DataSource</CODE> can be a push or pull
* <CODE>DataSource</CODE>--<code>Push[Pull]DataSource</code> or
* <code>Push[Pull]BufferDataSource</code>.
* @return The output <code>DataSource</code> for this <CODE>Multiplexer</CODE>.
*/
public DataSource getDataOutput();
/**
* Sets the output content-type for this <CODE>Multiplexer</CODE>.
*
* @param outputContentDescriptor A <CODE>ContentDescriptor</CODE> that describes the
* content-type of the data to be output by the <CODE>Multiplexer</CODE>.
* @return The content descriptor that most closely matches the specified content
* descriptor or null if the specified content descriptor cannot be set.
*/
public ContentDescriptor setContentDescriptor(ContentDescriptor outputContentDescriptor);
}
|