ooMPEG: object-oriented MPEG decoder
ooMPEG is a reentrant multi-threaded MPEG decoder written in C++. ooMPEG is
based on the
MPEG Library,
a wrapper written around the
Berkeley MPEG
decoder. The original was written in C by
Greg Ward at McGill, and
could only play a single MPEG movie in a single thread.
ooMPEG Features
- Multi-threaded decoding
Multi-threaded decoding (one thread displaying one or more movies, and one
thread to decode each movie) is available on SGI machines as well as Sun
machines using Posix threads or
c++threads, a
thread package written here at Brown by Tom Doepner. It should be easy to
port the multi-threading functionality to any system that supports Posix
compliant threads.
- Multiple movies
To get multiple MPEG movies I changed
the Berkeley MPEG decoder to be reentrant to support multiple movies
(the most recent version is 2.3-patched, in a gzip tar file, 140k).
- Buffering
Naive buffering of movies in memory has been implemented
Tested configurations
ooMPEG has been tested on the following configurations using version
2.3-patched of mpeg_play from Berkeley. If you get ooMPEG
working on other configurations, please email LSH AT cs.brown.edu
- Sun SparcStation 10, SunOS 5.4 (Solaris 2.4), 4 processors (also
2 and 1 processor configurations as well)
- Sun UltraSparc, SunOS 5.5 (Solaris 2.5), 1 processor
- Silicon Graphics Onyx Reality Engine 2, IRIX 5.3, 2 processors
- SGI Onyx Reality Engine 2, Irix 6.2
- SGI Impact, Irix 6.2
- HP 9000/735, HP-UX 9.03
- Pentium 100, Linux 1.3.17, XFree86 3.1.2, g++ 2.6.3
Necessary ingredients
Installation instructions
- Unpack the mpeg_play tar file, which will extract the package into a
child directory called ./mpeg_play.
The file name may be different if you use a later version.
- gunzip -c mpeg_play-2.3-patched-src.tar.gz |tar xvf -
- Unpack the MPEG wrapper in the same directory as you unpacked mpeg_play
(the parent directory of mpeg_play):
- zcat ooMPEG.tar.Z | tar xvf -
- Edit the Makefile (in mpeg_play/Makefile) to work for your platform
- Make the package
Examples
testwrap and testwrapobj are examples using the C and C++
interface respectively
libmpeg.a and libMPEG.a are libraries that use the C and C++
interface respectively.
To do
Please see the copyright message at the beginning of the source files to see
the legalese in reference to use, redistribution, and modification. Also,
please notify me of any changes you make to the package so I can include it in
the main distribution.
- testwrapobj shouldn't be restricted to a fixed number of movies
- use pre-defined symbols for each platform instead of setting them
in the Makefile
- ANIMbase::moreFrames should be private and accessed with an
accessor function
- in ANIMbase::GetFrame(char **Frame, Boolean *newFrame), newFrame
should be called frameReturned
- Should have libANIM.a library with THREADmp.o, BUFFER.o, etc. and
take those files out of libMPEG.a
Version History
January 26, 1996 - added version history, copyright info
January 17, 1996 - first release version
Acknowledgments
The whole Brown graphics group
Andy van Dam (Brown) for the lab
John Bazik (Brown) for package release help
Steve Smoot (Berkeley) for Berkeley MPEG decoder help
Greg Ward (McGill) for the original MPEG wrapper in C
Tom Meyer (Brown) for the original multi-threading code
Silicon Graphics Inc. for generously donating the Onyx Reality Engine
2 on which this package was tested
Dan Gould for Linux testing
tstaff (Brown) for keeping all the machines running, and replacing the
keyboards rendered inoperable by liquids
Everyone I've forgotten
lsh@cs.brown.edu (Loring Holden)
this page is http://www.cs.brown.edu/software/ooMPEG/
Loring Holden