/*
* @(#)ProcessorModel.java 1.13 02/08/21
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved.
*/
package javax.media;
import javax.media.format.*;
import javax.media.protocol.*;
/**
* Encapsulates the basic information required to create a
* <code>Processor</code>. A <code>ProcessorModel</code> can be passed to
* <code>Manager.createRealizedProcessor</code> to construct a <code>Processor</code>.
*<P>
* Extend this class to provide more control over what the
* output format of each track should be and let the <code>
* Manager.createRealizedProcessor</code> method do the rest of
* the work of creating and realizing a suitable <code>Processor</code>.
* @since JMF 2.0
*/
public class ProcessorModel {
private Format [] formats = null;
private MediaLocator inputLocator = null;
private DataSource inputDataSource = null;
private ContentDescriptor outputContentDescriptor = null;
/**
* Creates a <code>ProcessorModel</code> with null properties.
*/
public ProcessorModel() {
// Nothing to do
}
/**
* Creates a <code>ProcessorModel</code> for the specified track formats and
* output content-type. This constructor creates a <code>ProcessorModel</code>
* that can be used to construct a <code>Processor</code> for capturing media data.
* @param formats An array of <code>Format</code> objects that contains the desired track formats.
* @param outputContentDescriptor A <code>ContentDescriptor</code> that describes the desired output content-type.
* @return A <code>ProcessorModel</code> that encapsulates the specified attributes.
*/
public ProcessorModel(Format [] formats,
ContentDescriptor outputContentDescriptor) {
this.outputContentDescriptor = outputContentDescriptor;
this.formats = formats;
}
/**
* Creates a <code>ProcessorModel</code> for the specified input <code>DataSource</code>, track formats, and
* output type.
* @param inputDataSource The <code>DataSource</code> that identifies the media source for the <code>ProcessorModel</code>.
* @param formats An array of <code>Format</code> objects that contains the desired track formats.
* @param outputContentDescriptor A <code>ContentDescriptor</code> that describes the desired output content-type.
* @return A <code>ProcessorModel</code> that encapsulates the specified attributes.
*/
public ProcessorModel(DataSource inputDataSource,
Format [] formats,
ContentDescriptor outputContentDescriptor) {
this.inputDataSource = inputDataSource;
this.formats = formats;
this.outputContentDescriptor = outputContentDescriptor;
}
/**
* Creates a <code>ProcessorModel</code> for the specified input
* <code>MediaLocator</code>, track formats, and output type.
* @param inputLocator The <code>MediaLocator</code> that identifies the media source for this <code>ProcessorModel</code>.
* @param formats An array of <code>Format</code> objects that contains the desired track formats.
* @param outputContentDescriptor A <code>ContentDescriptor</code> that describes the desired output content-type.
* @return A <code>ProcessorModel</code> that encapsulates the specified attributes.
*/
public ProcessorModel(MediaLocator inputLocator,
Format [] formats,
ContentDescriptor outputContentDescriptor) {
this.inputLocator = inputLocator;
this.formats = formats;
this.outputContentDescriptor = outputContentDescriptor;
}
/**
* Gets the number of tracks required as the output of the
* <code>Processor</code> constructed with this <CODE>ProcessorModel</CODE>.
* @param availableTrackCount The number of tracks available, as an integer.
* @return The number of tracks required, as an integer.
*/
public int getTrackCount(int availableTrackCount) {
if (formats != null)
return formats.length;
return -1;
}
/**
* Gets the preferred <code>Format</code> of the specified track.
* @param tIndex The index of the track for which you want to get the preferred <code>Format</code>.
* @return The preferred <code>Format</code> for the track.
*/
public Format getOutputTrackFormat(int tIndex) {
if (formats != null && formats.length > tIndex)
return formats[tIndex];
return null;
}
/**
* Checks whether or not <code>tFormat</code> is an acceptable format for the track
* <code>tIndex</code>.
* @param tIndex The index of the track you want to check.
* @param tFormat The <code>Format</code> to check.
* @return <CODE>true</CODE> if the <CODE>Format</CODE> is acceptable, otherwise returns <CODE>false</CODE>.
*/
public boolean isFormatAcceptable(int tIndex, Format tFormat) {
if (formats != null && formats.length > tIndex) {
if (tFormat.matches(formats[tIndex]))
return true;
else
return false;
}
return true;
}
/**
* Gets the output content-type specified by this <code>ProcessorModel</code>.
* @return A <code>ContentDescriptor</code> that defines the output content-type. Returns null if the
* output type is not applicable or the output streams are to contain raw data that doesn't pertain to a specific content-type.
*/
public ContentDescriptor getContentDescriptor() {
return outputContentDescriptor;
}
/**
* <I>Tentative</I>.Returns the name of the file to write the output to.
* If this is not null,
* and the output data source has a single stream, then the output is written
* to this file.
*
*/
/**
public String getOutputFileName() {
// TODO: return the output file name
return null;
}
*/
/**
* Gets the input <code>DataSource</code> that specifies the media source for this <code>ProcessorModel</code>.
* The <code>inputLocator</code> is ignored
* if this value is non-null.
* @return A <code>DataSource</code> that specifies the media source.
*/
public javax.media.protocol.DataSource getInputDataSource() {
return inputDataSource;
}
/**
* Gets the input <code>MediaLocator</code> that specifies the media source for this <code>ProcessorModel</code>.
* This value is ignored if an input <code>DataSource</code> is specified.
* @return A <code>MediaLocator</code> that specifies the media source.
*/
public MediaLocator getInputLocator() {
return inputLocator;
}
}
|