Here's an explanation of how the classes in the proposed
API fit together.
File Level Classes
These classes are for manipulating media files or multitrack media streams.
Node level
The ExtractorNode implements Extractor functionality in a node format. It is a FileInterface, a BufferProducer, and a Controllable.
The WriterNode implements Writer functionality in a node format. It is a FileInterface, a BufferConsumer, and a Controllable.
Application level
The MediaFile is used for applications that need read/write access to a file. Typically this will be audio/video editors.
OpenBeOS.ExtractorWriterAPI.ProposedAPI.MediaExtractor
The MediaExtractor is used for applications that only need read access to a file. For example, a video player, audio player, or for the input to a conversion program.
OpenBeOS.ExtractorWriterAPI.ProposedAPI.MediaWriter
The MediaWriter is used for applications that only need write access to a file. For example, a video capture program, audio recording program, or for the output from a conversion program.
Implementation level
OpenBeOS.ExtractorWriterAPI.ProposedAPI.Extractor
The Extractor implements the functionality for parsing a file into multiple tracks. It also parses a file formats header information and provides a means to read it.
OpenBeOS.ExtractorWriterAPI.ProposedAPI.Writer
The Writer implements the functionality for creating a file from multiple tracks. It also provides a means for adding header information and creating a header.
Track Level classes
These classes are for manipulating a particular track from a media file or multitrack media stream.
Application level
The MediaTrack is used for any application that needs read/write access to a track from a file.
Codec Level classes
These classes are for manipulating a piece of data from a particular track from a media file or multitrack media stream.
Node level
The DecoderNode implements Decoder functionality in a node format. It is a BufferProducer, a Controllable, and a BufferConsumer.
The EncoderNode implements Encoder functionality in a node format. It is a BufferProducer, a Controllable, and a BufferConsumer.
Application level
The MediaDecoder is used for any application to obtain a suitable decoder which can read a particular media format, such as Sorenson, ADPCM, etc. Examples include any program that is going to display, play, manipulate the data in a decoded format. The MediaDecoder knows how to search and query all available decoders to find the appropriate one for a format or a piece of encoded data.
The MediaEncoder is used for any application to obtain a suitable encoder which can write a particular media format, such as Sorenson, ADPCM, etc. Examples include any program that is going to transmit or store the data in an encoded format. The MediaEncoder knows how to search and query all available decoders to find the appropriate one for a format.
Implementation level
The Decoder implements the functionality for decoding a stream of encoded media.
The Encoder implements the functionality for encoding a stream of raw media.
Supplemental Classes
The BAddonManager is used to keep a load and manage a set of prototypical instances of addons in a set of directories. It does so in a "live" fashion, by using a node monitor on each directory. For example: if a file is dropped into a decoder directory, the AddonManager will attempt to load it as an addon and then query it to find out if it is a decoder. If so, it will create a prototypical instance of the decoder, which will be used for Sniffing, etc. Similarly, if a file is removed, the addon will be removed from the prototypical instances and it will no longer be queried.