diff --git a/src/add-ons/media/media-add-ons/AbstractFileInterfaceAddOn.cpp b/src/add-ons/media/media-add-ons/AbstractFileInterfaceAddOn.cpp new file mode 100644 index 0000000000..a4ef43ae3e --- /dev/null +++ b/src/add-ons/media/media-add-ons/AbstractFileInterfaceAddOn.cpp @@ -0,0 +1,240 @@ +// AbstractFileInterfaceAddOn.cpp +// +// Andrew Bachmann, 2002 +// +// AbstractFileInterfaceAddOn is an add-on +// that can make instances of AbstractFileInterfaceNode +// +// AbstractFileInterfaceNode handles a file and a multistream + + +#include +#include +#include +#include +#include +#include + +#include "AbstractFileInterfaceNode.h" +#include "AbstractFileInterfaceAddOn.h" + +#include +#include +#include + +// instantiation function +extern "C" _EXPORT BMediaAddOn * make_media_addon(image_id image); +// { +// return new AbstractFileInterfaceAddOn(image); +// } + +// -------------------------------------------------------- // +// ctor/dtor +// -------------------------------------------------------- // + +AbstractFileInterfaceAddOn::~AbstractFileInterfaceAddOn() +{ +} + +AbstractFileInterfaceAddOn::AbstractFileInterfaceAddOn(image_id image) : + BMediaAddOn(image) +{ + fprintf(stderr,"AbstractFileInterfaceAddOn::AbstractFileInterfaceAddOn\n"); + refCount = 0; +} + +// -------------------------------------------------------- // +// BMediaAddOn impl +// -------------------------------------------------------- // + +status_t AbstractFileInterfaceAddOn::InitCheck( + const char ** out_failure_text) +{ + fprintf(stderr,"AbstractFileInterfaceAddOn::InitCheck\n"); + return B_OK; +} + +int32 AbstractFileInterfaceAddOn::CountFlavors() +{ + fprintf(stderr,"AbstractFileInterfaceAddOn::CountFlavors\n"); + return 1; +} + +status_t AbstractFileInterfaceAddOn::GetFlavorAt( + int32 n, + const flavor_info ** out_info) +{ + fprintf(stderr,"AbstractFileInterfaceAddOn::GetFlavorAt\n"); + if (out_info == 0) { + fprintf(stderr,"<- B_BAD_VALUE\n"); + return B_BAD_VALUE; // we refuse to crash because you were stupid + } + if (n != 0) { + fprintf(stderr,"<- B_BAD_INDEX\n"); + return B_BAD_INDEX; + } + flavor_info * infos = new flavor_info[1]; + AbstractFileInterfaceNode::GetFlavor(&infos[0],n); + (*out_info) = infos; + return B_OK; +} + +status_t AbstractFileInterfaceAddOn::GetConfigurationFor( + BMediaNode * your_node, + BMessage * into_message) +{ + fprintf(stderr,"AbstractFileInterfaceAddOn::GetConfigurationFor\n"); + if (into_message == 0) { + fprintf(stderr,"<- B_BAD_VALUE\n"); + return B_BAD_VALUE; // we refuse to crash because you were stupid + } + AbstractFileInterfaceNode * node + = dynamic_cast(your_node); + if (node == 0) { + fprintf(stderr,"<- B_BAD_TYPE\n"); + return B_BAD_TYPE; + } + return node->GetConfigurationFor(into_message); +} + +bool AbstractFileInterfaceAddOn::WantsAutoStart() +{ + fprintf(stderr,"AbstractFileInterfaceAddOn::WantsAutoStart\n"); + return false; +} + +status_t AbstractFileInterfaceAddOn::AutoStart( + int in_count, + BMediaNode ** out_node, + int32 * out_internal_id, + bool * out_has_more) +{ + fprintf(stderr,"AbstractFileInterfaceAddOn::AutoStart\n"); + return B_OK; +} + +// -------------------------------------------------------- // +// BMediaAddOn impl for B_FILE_INTERFACE nodes +// -------------------------------------------------------- // + +status_t AbstractFileInterfaceAddOn::SniffRef( + const entry_ref & file, + BMimeType * io_mime_type, + float * out_quality, + int32 * out_internal_id) +{ + fprintf(stderr,"AbstractFileInterfaceAddOn::SniffRef\n"); + if ((io_mime_type == 0) || (out_quality == 0) || (out_internal_id == 0)) { + fprintf(stderr,"<- B_BAD_VALUE\n"); + return B_BAD_VALUE; // we refuse to crash because you were stupid + } + *out_internal_id = 0; // only one flavor + char mime_string[B_MIME_TYPE_LENGTH+1]; + status_t status = AbstractFileInterfaceNode::StaticSniffRef(file,mime_string,out_quality); + io_mime_type->SetTo(mime_string); + return status; +} + +// even though I implemented SniffTypeKind below and this shouldn't get called, +// I am going to implement it anyway. I'll use it later anyhow. +status_t AbstractFileInterfaceAddOn::SniffType( + const BMimeType & type, + float * out_quality, + int32 * out_internal_id) +{ + fprintf(stderr,"AbstractFileInterfaceAddOn::SniffType\n"); + if ((out_quality == 0) || (out_internal_id == 0)) { + fprintf(stderr,"<- B_BAD_VALUE\n"); + return B_BAD_VALUE; // we refuse to crash because you were stupid + } + *out_quality = 1.0; + *out_internal_id = 0; + return B_OK; +} + +// This function treats null pointers slightly differently than the others. +// This is because a program could reasonably call this function with just +// about any junk, get the out_read_items or out_write_items and then use +// that to create an array of sufficient size to hold the result, and then +// call us again. So we won't punish them if they supply us with null +// pointers the first time around. +status_t AbstractFileInterfaceAddOn::GetFileFormatList( + int32 flavor_id, + media_file_format * out_writable_formats, + int32 in_write_items, + int32 * out_write_items, + media_file_format * out_readable_formats, + int32 in_read_items, + int32 * out_read_items, + void * _reserved) +{ + fprintf(stderr,"AbstractFileInterfaceAddOn::GetFileFormatList\n"); + if (flavor_id != 0) { + // this is a sanity check for now + fprintf(stderr,"<- B_BAD_INDEX\n"); + return B_BAD_INDEX; + } + // see null check comment above + if (out_write_items != 0) { + *out_write_items = 0; + } + // see null check comment above + if (out_read_items != 0) { + *out_read_items = 0; + } + return B_OK; +} + +status_t AbstractFileInterfaceAddOn::SniffTypeKind( + const BMimeType & type, + uint64 in_kinds, + uint64 io_kind, + float * out_quality, + int32 * out_internal_id, + void * _reserved) +{ + fprintf(stderr,"AbstractFileInterfaceAddOn::SniffTypeKind\n"); + if ((out_quality == 0) || (out_internal_id == 0)) { + fprintf(stderr,"<- B_BAD_VALUE\n"); + return B_BAD_VALUE; // we refuse to crash because you were stupid + } + if (in_kinds & (io_kind | B_FILE_INTERFACE | B_CONTROLLABLE)) { + return SniffType(type,out_quality,out_internal_id); + } else { + // They asked for some kind we don't supply. We set the output + // just in case they try to do something with it anyway (!) + *out_quality = 0; + *out_internal_id = -1; + fprintf(stderr,"<- B_BAD_TYPE\n"); + return B_BAD_TYPE; + } +} + +// -------------------------------------------------------- // +// main +// -------------------------------------------------------- // + +// int main(int argc, char *argv[]) +//{ +//} + +// -------------------------------------------------------- // +// stuffing +// -------------------------------------------------------- // + +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_0(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_1(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_2(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_3(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_4(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_5(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_6(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_7(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_8(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_9(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_10(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_11(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_12(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_13(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_14(void *) {}; +status_t AbstractFileInterfaceAddOn::_Reserved_AbstractFileInterfaceAddOn_15(void *) {}; diff --git a/src/add-ons/media/media-add-ons/Jamfile b/src/add-ons/media/media-add-ons/Jamfile index 5930b4f646..8c520cd06f 100644 --- a/src/add-ons/media/media-add-ons/Jamfile +++ b/src/add-ons/media/media-add-ons/Jamfile @@ -4,3 +4,4 @@ SubInclude OBOS_TOP src add-ons media media-add-ons reader ; SubInclude OBOS_TOP src add-ons media media-add-ons writer ; SubInclude OBOS_TOP src add-ons media media-add-ons legacy ; SubInclude OBOS_TOP src add-ons media media-add-ons mixer ; + diff --git a/src/add-ons/media/media-add-ons/reader/MediaReader.cpp b/src/add-ons/media/media-add-ons/reader/MediaReader.cpp index 2912dd198b..1152751a02 100644 --- a/src/add-ons/media/media-add-ons/reader/MediaReader.cpp +++ b/src/add-ons/media/media-add-ons/reader/MediaReader.cpp @@ -212,7 +212,8 @@ void print_media_format(media_format * format) { default: fprintf(stderr,"????"); break; } fprintf(stderr,"}"); -}*/ +} +*/ bool multistream_format_is_acceptible( const media_multistream_format & producer_format,