1// MediaReaderAddOn.cpp 2// 3// Andrew Bachmann, 2002 4// 5// A MediaReaderAddOn is an add-on 6// that can make MediaReader nodes 7// 8// MediaReader nodes read a file into a multistream 9#include "MediaReader.h" 10#include "MediaReaderAddOn.h" 11#include "debug.h" 12 13#include <Errors.h> 14#include <MediaAddOn.h> 15#include <MediaDefs.h> 16#include <MediaRoster.h> 17#include <Mime.h> 18#include <Node.h> 19#include <StorageDefs.h> 20 21 22#include <limits.h> 23#include <stdio.h> 24#include <string.h> 25 26 27// instantiation function 28extern "C" _EXPORT BMediaAddOn * make_media_addon(image_id image) { 29 return new MediaReaderAddOn(image); 30} 31 32 33MediaReaderAddOn::~MediaReaderAddOn() 34{ 35} 36 37 38MediaReaderAddOn::MediaReaderAddOn(image_id image) : 39 AbstractFileInterfaceAddOn(image) 40{ 41 CALLED(); 42} 43 44 45// -------------------------------------------------------- // 46// BMediaAddOn impl 47// -------------------------------------------------------- // 48status_t MediaReaderAddOn::GetFlavorAt( 49 int32 n, 50 const flavor_info ** out_info) 51{ 52 CALLED(); 53 54 if (n != 0) { 55 PRINT("\t<- B_BAD_INDEX\n"); 56 return B_BAD_INDEX; 57 } 58 59 flavor_info * infos = new flavor_info[1]; 60 MediaReader::GetFlavor(&infos[0],n); 61 (*out_info) = infos; 62 return B_OK; 63} 64 65 66BMediaNode * MediaReaderAddOn::InstantiateNodeFor( 67 const flavor_info * info, 68 BMessage * config, 69 status_t * out_error) 70{ 71 CALLED(); 72 73 // XXX: read from add-on's attributes 74 size_t defaultChunkSize = size_t(8192); // 8192 bytes = 8 Kilobytes 75 // = 2048 kilobits/millisec = 256000 Kilobytes/sec 76 float defaultBitRate = 2048; 77 MediaReader * node 78 = new MediaReader(defaultChunkSize, 79 defaultBitRate, 80 info,config,this); 81 if (node == 0) { 82 *out_error = B_NO_MEMORY; 83 PRINT("\t<- B_NO_MEMORY\n"); 84 } else { 85 *out_error = node->InitCheck(); 86 } 87 return node; 88} 89 90 91status_t MediaReaderAddOn::GetConfigurationFor( 92 BMediaNode * your_node, 93 BMessage * into_message) 94{ 95 CALLED(); 96 97 MediaReader * node 98 = dynamic_cast<MediaReader*>(your_node); 99 if (node == 0) { 100 fprintf(stderr,"<- B_BAD_TYPE\n"); 101 return B_BAD_TYPE; 102 } 103 return node->GetConfigurationFor(into_message); 104} 105 106 107// -------------------------------------------------------- // 108// BMediaAddOn impl for B_FILE_INTERFACE nodes 109// -------------------------------------------------------- // 110 111status_t MediaReaderAddOn::GetFileFormatList( 112 int32 flavor_id, 113 media_file_format * out_writable_formats, 114 int32 in_write_items, 115 int32 * out_write_items, 116 media_file_format * out_readable_formats, 117 int32 in_read_items, 118 int32 * out_read_items, 119 void * _reserved) 120{ 121 CALLED(); 122 123 if (flavor_id != 0) { 124 // this is a sanity check for now 125 PRINT("\t<- B_BAD_INDEX\n"); 126 return B_BAD_INDEX; 127 } 128 // don't go off the end 129 if (in_read_items > 0) { 130 MediaReader::GetFileFormat(&out_readable_formats[0]); 131 } 132 return B_OK; 133} 134 135 136status_t MediaReaderAddOn::SniffTypeKind( 137 const BMimeType & type, 138 uint64 in_kinds, 139 float * out_quality, 140 int32 * out_internal_id, 141 void * _reserved) 142{ 143 CALLED(); 144 return AbstractFileInterfaceAddOn::SniffTypeKind(type,in_kinds, 145 B_BUFFER_PRODUCER, 146 out_quality,out_internal_id, 147 _reserved); 148} 149 150// -------------------------------------------------------- // 151// main 152// -------------------------------------------------------- // 153int main(int argc, char *argv[]) 154{ 155 fprintf(stderr,"main called for MediaReaderAddOn\n"); 156 return 0; 157} 158 159// -------------------------------------------------------- // 160// stuffing 161// -------------------------------------------------------- // 162 163status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_0(void *) {return B_ERROR;}; 164status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_1(void *) {return B_ERROR;}; 165status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_2(void *) {return B_ERROR;}; 166status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_3(void *) {return B_ERROR;}; 167status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_4(void *) {return B_ERROR;}; 168status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_5(void *) {return B_ERROR;}; 169status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_6(void *) {return B_ERROR;}; 170status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_7(void *) {return B_ERROR;}; 171status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_8(void *) {return B_ERROR;}; 172status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_9(void *) {return B_ERROR;}; 173status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_10(void *) {return B_ERROR;}; 174status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_11(void *) {return B_ERROR;}; 175status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_12(void *) {return B_ERROR;}; 176status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_13(void *) {return B_ERROR;}; 177status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_14(void *) {return B_ERROR;}; 178status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_15(void *) {return B_ERROR;}; 179