/*
* @(#)PushBufferStream.java 1.9 02/08/21
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved.
*/
package javax.media.protocol;
import java.io.IOException;
import javax.media.Buffer;
/**
* Abstracts a read interface that pushes data in the form of Buffer objects
* This interface allows a source stream to transfer data in the form
* of an entire media chunk to the user of this source stream. The
* media object or chunk transferred is the Buffer object as defined in
* javax.media.Buffer. The user of the stream will allocate an empty Buffer
* object and pass this over to the source stream in the read() method.
* The source stream will allocate the Buffer object's data and
* header, set them on the Buffer and send them over to the user.<BR><BR>
*
* The structure of the data and header of the Buffer object is
* determined by the format attribute of the Buffer object or the content type of
* the source stream<BR><BR>
*
* It is possible for the user of the stream to indicate to the
* source stream to NOT allocate the data object, but to
* instead use the data passed in the read() method. In this case,
* the user must pass non null data object to the stream in the Buffer
* object. The type of data can be determined by the getDataType()
* method on the format object returned by calling getFormat() on this
* bufferstream. The <code>getDataType</code> method will return an object
* describing the Buffer's data and can be used by the stream user to allocate its
* own data and hand it over to the read method. <BR><BR>
*
* @see javax.media.Format
* @see PushBufferDataSource
* @since JMF 2.0
*/
public interface PushBufferStream extends SourceStream {
/**
* Get the format tupe of the data that this source stream provides.
* @return A <CODE>Format</CODE> object that describes the data in this stream.
*/
public javax.media.Format getFormat();
/**
* Read from the stream without blocking.
* @throws IOException Thrown if an error occurs while reading
*
*/
public void read(Buffer buffer) throws IOException;
/**
* Register an object to service data transfers to this stream.
* <p>
* If a handler is already registered when
* <CODE>setTransferHandler</CODE> is called,
* the handler is replaced;
* there can only be one handler at a time. This method should be
* invoked with a parameter value of <code>null</code> if the currently
* registered handler doesn't wish to be notified of available data anymore.
*
* @param transferHandler The handler to transfer data to.
*/
public void setTransferHandler(BufferTransferHandler transferHandler);
}
|