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 *) { return B_ERROR; };
153status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_1(void *) { return B_ERROR; };
154status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_2(void *) { return B_ERROR; };
155status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_3(void *) { return B_ERROR; };
156status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_4(void *) { return B_ERROR; };
157status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_5(void *) { return B_ERROR; };
158status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_6(void *) { return B_ERROR; };
159status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_7(void *) { return B_ERROR; };
160status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_8(void *) { return B_ERROR; };
161status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_9(void *) { return B_ERROR; };
162status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_10(void *) { return B_ERROR; };
163status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_11(void *) { return B_ERROR; };
164status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_12(void *) { return B_ERROR; };
165status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_13(void *) { return B_ERROR; };
166status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_14(void *) { return B_ERROR; };
167status_t MediaWriterAddOn::_Reserved_MediaWriterAddOn_15(void *) { return B_ERROR; };
168