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
make_media_addon(image_id image)26 extern "C" _EXPORT BMediaAddOn * make_media_addon(image_id image) {
27 return new MediaWriterAddOn(image);
28 }
29
30 // -------------------------------------------------------- //
31 // ctor/dtor
32 // -------------------------------------------------------- //
33
~MediaWriterAddOn()34 MediaWriterAddOn::~MediaWriterAddOn()
35 {
36 }
37
MediaWriterAddOn(image_id image)38 MediaWriterAddOn::MediaWriterAddOn(image_id image) :
39 AbstractFileInterfaceAddOn(image)
40 {
41 fprintf(stderr,"MediaWriterAddOn::MediaWriterAddOn\n");
42 }
43
44 // -------------------------------------------------------- //
45 // BMediaAddOn impl
46 // -------------------------------------------------------- //
47
GetFlavorAt(int32 n,const flavor_info ** out_info)48 status_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
InstantiateNodeFor(const flavor_info * info,BMessage * config,status_t * out_error)63 BMediaNode * 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
GetConfigurationFor(BMediaNode * your_node,BMessage * into_message)84 status_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
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)102 status_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
SniffTypeKind(const BMimeType & type,uint64 in_kinds,float * out_quality,int32 * out_internal_id,void * _reserved)125 status_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
main(int argc,char * argv[])143 int main(int argc, char *argv[])
144 {
145 fprintf(stderr,"main called for MediaWriterAddOn\n");
146 }
147
148 // -------------------------------------------------------- //
149 // stuffing
150 // -------------------------------------------------------- //
151
_Reserved_MediaWriterAddOn_0(void *)152 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_0(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_1(void *)153 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_1(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_2(void *)154 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_2(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_3(void *)155 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_3(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_4(void *)156 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_4(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_5(void *)157 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_5(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_6(void *)158 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_6(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_7(void *)159 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_7(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_8(void *)160 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_8(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_9(void *)161 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_9(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_10(void *)162 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_10(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_11(void *)163 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_11(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_12(void *)164 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_12(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_13(void *)165 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_13(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_14(void *)166 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_14(void *) { return B_ERROR; };
_Reserved_MediaWriterAddOn_15(void *)167 status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_15(void *) { return B_ERROR; };
168