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:
@@ -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,13 +14,13 @@
|
|||||||
|
|
||||||
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;
|
||||||
@@ -37,13 +43,13 @@ _CreateReader(Reader **reader, int32 *streamCount, media_file_format *mff, BData
|
|||||||
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;
|
||||||
@@ -53,7 +59,7 @@ _CreateReader(Reader **reader, int32 *streamCount, media_file_format *mff, BData
|
|||||||
(*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,29 +88,25 @@ _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");
|
||||||
|
|
||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user