Page Updated June 14th, 2001.
To extend the existing OS/2 multimedia subsystem (MMOS/2) to support modern formats and features
IBM has long ago lost interest in improving OS/2's multimedia features, instead focusing the OS/2 features related to business computing. In that time the world of multimedia has changed a lot. New formats like mp3 and DivX have become popular, and new features like skins and visualizations have been developed. There have been applications for OS/2 developed that support these new formats and features, but they are generally in the form of stand alone programs, each with their own interfaces and set of formats they supports.
What I propose that OS/2's existing multimedia system be used to create a separation between the decoders of these new media files and the interfaces people use to play the files. The developers of decoders (and encoders) would set them up to so they can be played through MMOS/2. This would mean that you'd be able to play these new formats with the OS/2 multimedia WorkPlace Shell classes that come with OS/2, as well as any other player that supports playing using MMOS/2. The people who are developing interface would design so that that play any format supported by MMOS/2.
The main advantage of this would be choice. You could use any interface you want to play the media files you want and the interface your develop will support all the formats handled by MMOS/2, past present and future.
I posted my idea on usenet, and got positive responces in the discussion and in emails.
Some people have been concerned there would have problems with instability. This is because they've had problems in the past used the WPS based multimedia players and the plug-in-pack MPEG video player. These problems are not problems with MMOS/2 itself, but with the components, like the WPS multimedia players and the MPEG video player. These components can be replaced if they are causing problems. This is one of the benefits of choice.
Putting MMOS/2 between the decoder and the interface could mean losing features because the interface would be limited to the functionality provided by MMOS/2. Fortunately MMOS/2 was designed to be extended and we could add additional functions. This could include things like adding a system to send the PCM and synchronization data so the interface could support visualizations, settings for output quality, or adding a command for full screen video.
Creating a improved Netscape Plug-In to support all the formats that MMOS/2 can handle.
Creating a MMOS/2 player is relatively straight forward and is well documented. Creating a decoder that is integrated with MMOS/2 something few people have attempted. There a couple of ways it can be done.
You can create Media Control Device (MCD). It is a dll that receives almost the same commands that are sent by the application, like play, stop, pause. It can be used for either video or audio.
Alternatively, you can create a I/O procedure, also know as a CODEC for video. In that case you create a dll that translates the format your decoding into a stream in a standard format. The dll responds to commands like read and seek.
Which one you choose depends on your situation. Generally creating an I/O procedure is easier because many of the details of sending the output the sound card and handling many of the functions supported by MMOS/2 is taken care of for you, including conversion to other formats. However if the code you're working work is already designed to be hooked up to a user interface it can be easier to to respond to the kinds of commends sent to a MCD.
If this idea catches on, I would like this web page to become a resource of programmers working on multimedia applications for OS/2. I would include help on writing MCDs and I/O procedures and details of new MMOS/2 commands developed.
TiMidity MCD, Midi player
MMIOMP3, mpeg and Ogg Vorbis audio player
CW-Multimedia classes, WPS player with tagging
Normal Player, stand alone player
WarpVision, all purpose video player
WarpMedia, mpeg video player
MikMod, a module player
Darwin O'Connor firstname.lastname@example.org