[openbeosmediakit] New BMediaFormats and friends
- From: "Axel Dörfler" <axeld@xxxxxxxxxxxxxxxx>
- To: "OpenBeOS Media Kit" <openbeosmediakit@xxxxxxxxxxxxx>
- Date: Fri, 23 Jan 2004 08:39:12 +0100 CET
Hi there,
I brought the BMediaFormats class into a usable state and reworked the
decoder seek process.
Here is what I did:
- BMediaFormats is now completely implemented
- Reader::GetStreamInfo() must now call one of the BMediaFormats::Get*
FormatFor() calls to create the empty outFormat and do his changes
based upon that - the outFormat will automatically have a valid
encoding because of that.
- I moved MediaPlugin::RegisterPlugin() to
DecoderPlugin::RegisterDecoder() (since only this class used it)
- The myDecoder::RegisterDecoder() implementation must call
BMediaFormats::MakeFormatFor() to register the media_format_description
for the decoder.
- There is quite some magic involved with MakeFormatFor() and I am not
sure if we should keep it this way or not; basically, the AddOnManager
who is responsible for calling Decoder::RegisterDecoder() installs a
hook in the server local BMediaFormats class that will call it when
MakeFormatFor() is called - the AddOnManager is locked during that
time, so that there is no way to call the wrong hook (it's the same
method Marcus used before for the DecoderPlugin)
- that hook not only calls FormatManager::RegisterDe/Encoder() to get a
valid outFormat, it also stores the new format in the decoder_info
- these formats are used to implement GET_DECODER_FOR_FORMAT - and
that's why the reader has to pass a registered format to this call
- the FormatManager manages the audio_encoding/video_encoding fields -
when a codec calls MakeFormatFor(), it will assign a new ID to it
- I also fixed the == and < operators for media_format_description
(didn't touch the B_OGG_FILE_FORMAT, though)
- BMediaFormats is now using one static list with all formats (for all
existing BMediaFormats objects) - it is aware that the registered
formats can change at any point, and it will try to update them before
every call (they will only be updated if there were any changes,
though)
- I added a BMessage based QueryServer() which the BMediaFormats class
uses to update its local list copy
- the AddOnManager now scans B_USER_ADDONS_DIRECTORY, B_COMMON_*, and
B_BEOS_*. Temporarily the OpenBeOS distro directory is also scanned (if
it is under /boot/home/develop/openbeos/)
- I introduced a new Decoder::GetCodecInfo() that fills a
media_codec_info structure
- I updated all existing decoder add-ons to the new API
What's left to do?
- I haven't yet checked if raw decoders work
- the ogg/vorbis/speex stuff doesn't work anymore - I hope that Andrew
won't be too mad at me, but his current decoder detection mechanism was
just broken; I've added "ToDo" items to the problematic lines; you just
have to switch to a media_format_description based recognition
- there is no special Ogg-type reader support yet (I planned to let the
codec decide if it can sniff or not)
- there is no loading/saving of settings (the FormatManager should use
a user editable settings file)
- the FormatManager sends his replys in the server thread, and it
shouldn't do this with a timeout > 0 (currently 5 secs) - the timeout
should either be set to 0, or the task off-loaded to another thread
That might be all, but I probably forgot half of it :)
If you encounter any problems, please shout - the new version is now in
CVS.
Bye,
Axel.
- Follow-Ups:
- [openbeosmediakit] Re: New BMediaFormats and friends
- From: Marcus Overhagen
Other related posts:
- » [openbeosmediakit] New BMediaFormats and friends
- » [openbeosmediakit] Re: New BMediaFormats and friends
- [openbeosmediakit] Re: New BMediaFormats and friends
- From: Marcus Overhagen