Updated to new API, some minor changes. Added "ToDo" items in the

DestroyReader/Decoder() functions - they erroneously don't put the
plugin back.
Added license.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6240 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2004-01-23 07:23:14 +00:00
parent 29f1f4488e
commit 6e53563dac
+36 -27
View File
@@ -1,3 +1,9 @@
/*
** Copyright 2004, Marcus Overhagen. All rights reserved.
** Distributed under the terms of the OpenBeOS License.
*/
#include <Path.h> #include <Path.h>
#include <image.h> #include <image.h>
#include <string.h> #include <string.h>
@@ -8,18 +14,18 @@
PluginManager _plugin_manager; PluginManager _plugin_manager;
status_t status_t
_CreateReader(Reader **reader, int32 *streamCount, media_file_format *mff, BDataIO *source) _CreateReader(Reader **reader, int32 *streamCount, media_file_format *mff, BDataIO *source)
{ {
printf("_CreateReader enter\n"); printf("_CreateReader enter\n");
BPositionIO *seekable_source = dynamic_cast<BPositionIO *>(source); BPositionIO *seekable_source = dynamic_cast<BPositionIO *>(source);
if (seekable_source == 0) { if (seekable_source == 0) {
printf("_CreateReader: non-seekable sources not supported yet\n"); printf("_CreateReader: non-seekable sources not supported yet\n");
return B_ERROR; return B_ERROR;
} }
// get list of available readers from, the server // get list of available readers from, the server
server_get_readers_request request; server_get_readers_request request;
server_get_readers_reply reply; server_get_readers_reply reply;
@@ -27,7 +33,7 @@ _CreateReader(Reader **reader, int32 *streamCount, media_file_format *mff, BData
printf("_CreateReader: can't get list of readers\n"); printf("_CreateReader: can't get list of readers\n");
return B_ERROR; return B_ERROR;
} }
// try each reader by calling it's Sniff function... // try each reader by calling it's Sniff function...
for (int32 i = 0; i < reply.count; i++) { for (int32 i = 0; i < reply.count; i++) {
entry_ref ref = reply.ref[i]; entry_ref ref = reply.ref[i];
@@ -36,24 +42,24 @@ _CreateReader(Reader **reader, int32 *streamCount, media_file_format *mff, BData
printf("_CreateReader: GetPlugin failed\n"); printf("_CreateReader: GetPlugin failed\n");
return B_ERROR; return B_ERROR;
} }
ReaderPlugin *readerplugin = dynamic_cast<ReaderPlugin *>(plugin); ReaderPlugin *readerPlugin = dynamic_cast<ReaderPlugin *>(plugin);
if (!readerplugin) { if (!readerPlugin) {
printf("_CreateReader: dynamic_cast failed\n"); printf("_CreateReader: dynamic_cast failed\n");
return B_ERROR; return B_ERROR;
} }
*reader = readerplugin->NewReader(); *reader = readerPlugin->NewReader();
if (! *reader) { if (! *reader) {
printf("_CreateReader: NewReader failed\n"); printf("_CreateReader: NewReader failed\n");
return B_ERROR; return B_ERROR;
} }
seekable_source->Seek(0, SEEK_SET); seekable_source->Seek(0, SEEK_SET);
(*reader)->Setup(seekable_source); (*reader)->Setup(seekable_source);
if (B_OK == (*reader)->Sniff(streamCount)) { if (B_OK == (*reader)->Sniff(streamCount)) {
printf("_CreateReader: Sniff success\n"); printf("_CreateReader: Sniff success (%ld stream(s))\n", *streamCount);
(*reader)->GetFileFormatInfo(mff); (*reader)->GetFileFormatInfo(mff);
return B_OK; return B_OK;
} }
@@ -67,8 +73,9 @@ _CreateReader(Reader **reader, int32 *streamCount, media_file_format *mff, BData
return B_MEDIA_NO_HANDLER; return B_MEDIA_NO_HANDLER;
} }
status_t status_t
_CreateDecoder(Decoder **decoder, media_codec_info *mci, const media_format *format) _CreateDecoder(Decoder **_decoder, media_codec_info *codecInfo, const media_format *format)
{ {
printf("_CreateDecoder enter\n"); printf("_CreateDecoder enter\n");
@@ -81,32 +88,28 @@ _CreateDecoder(Decoder **decoder, media_codec_info *mci, const media_format *for
return B_ERROR; return B_ERROR;
} }
MediaPlugin *plugin; MediaPlugin *plugin = _plugin_manager.GetPlugin(reply.ref);
DecoderPlugin *decoderplugin;
plugin = _plugin_manager.GetPlugin(reply.ref);
if (!plugin) { if (!plugin) {
printf("_CreateDecoder: GetPlugin failed\n"); printf("_CreateDecoder: GetPlugin failed\n");
return B_ERROR; return B_ERROR;
} }
decoderplugin = dynamic_cast<DecoderPlugin *>(plugin); DecoderPlugin *decoderPlugin = dynamic_cast<DecoderPlugin *>(plugin);
if (!decoderplugin) { if (!decoderPlugin) {
printf("_CreateDecoder: dynamic_cast failed\n"); printf("_CreateDecoder: dynamic_cast failed\n");
return B_ERROR; return B_ERROR;
} }
*decoder = decoderplugin->NewDecoder(); *_decoder = decoderPlugin->NewDecoder();
if (! *decoder) { if (*_decoder == NULL) {
printf("_CreateDecoder: NewReader failed\n"); printf("_CreateDecoder: NewDecoder() failed\n");
return B_ERROR; return B_ERROR;
} }
strcpy(mci->short_name, " mci short_name"); (*_decoder)->GetCodecInfo(*codecInfo);
strcpy(mci->pretty_name, " mci pretty_name");
printf("_CreateDecoder leave\n"); printf("_CreateDecoder leave\n");
return B_OK; return B_OK;
} }
@@ -114,16 +117,22 @@ _CreateDecoder(Decoder **decoder, media_codec_info *mci, const media_format *for
void void
_DestroyReader(Reader *reader) _DestroyReader(Reader *reader)
{ {
// ToDo: must call put plugin
delete reader; delete reader;
} }
void void
_DestroyDecoder(Decoder *decoder) _DestroyDecoder(Decoder *decoder)
{ {
// ToDo: must call put plugin
delete decoder; delete decoder;
} }
// #pragma mark -
PluginManager::PluginManager() PluginManager::PluginManager()
{ {
CALLED(); CALLED();