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 28 extern "C" _EXPORT BMediaAddOn * make_media_addon(image_id image) { 29 return new MediaReaderAddOn(image); 30 } 31 32 33 MediaReaderAddOn::~MediaReaderAddOn() 34 { 35 } 36 37 38 MediaReaderAddOn::MediaReaderAddOn(image_id image) : 39 AbstractFileInterfaceAddOn(image) 40 { 41 CALLED(); 42 } 43 44 45 // -------------------------------------------------------- // 46 // BMediaAddOn impl 47 // -------------------------------------------------------- // 48 status_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 66 BMediaNode * 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 91 status_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 111 status_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 136 status_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 // -------------------------------------------------------- // 153 int main(int argc, char *argv[]) 154 { 155 fprintf(stderr,"main called for MediaReaderAddOn\n"); 156 return 0; 157 } 158 159 // -------------------------------------------------------- // 160 // stuffing 161 // -------------------------------------------------------- // 162 163 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_0(void *) {return B_ERROR;}; 164 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_1(void *) {return B_ERROR;}; 165 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_2(void *) {return B_ERROR;}; 166 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_3(void *) {return B_ERROR;}; 167 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_4(void *) {return B_ERROR;}; 168 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_5(void *) {return B_ERROR;}; 169 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_6(void *) {return B_ERROR;}; 170 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_7(void *) {return B_ERROR;}; 171 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_8(void *) {return B_ERROR;}; 172 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_9(void *) {return B_ERROR;}; 173 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_10(void *) {return B_ERROR;}; 174 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_11(void *) {return B_ERROR;}; 175 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_12(void *) {return B_ERROR;}; 176 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_13(void *) {return B_ERROR;}; 177 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_14(void *) {return B_ERROR;}; 178 status_t MediaReaderAddOn::_Reserved_MediaReaderAddOn_15(void *) {return B_ERROR;}; 179