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