1// A MediaFileProducerAddOn is an add-on
2// that can make MediaFileProducer nodes
3
4#if !defined(_MEDIA_FILE_PRODUCER_ADD_ON_H)
5#define _MEDIA_FILE_PRODUCER_ADD_ON_H
6
7#include <MediaDefs.h>
8#include <MediaAddOn.h>
9
10class MediaFileProducerAddOn :
11    public BMediaAddOn
12{
13public:
14MediaFileProducerAddOn();
15virtual ~MediaFileProducerAddOn();
16
17/**************************/
18/* begin from BMediaAddOn */
19public:
20virtual	~BMediaAddOn();
21
22virtual	status_t InitCheck(
23				const char ** out_failure_text);
24virtual	int32 CountFlavors();
25virtual	status_t GetFlavorAt(
26				int32 n,
27				const flavor_info ** out_info);
28virtual	BMediaNode * InstantiateNodeFor(
29				const flavor_info * info,
30				BMessage * config,
31				status_t * out_error);
32virtual	status_t GetConfigurationFor(
33				BMediaNode * your_node,
34				BMessage * into_message);
35virtual	bool WantsAutoStart();
36virtual	status_t AutoStart(
37				int in_count,
38				BMediaNode ** out_node,
39				int32 * out_internal_id,
40				bool * out_has_more);
41/* only implement if you have a B_FILE_INTERFACE node */
42virtual	status_t SniffRef(
43				const entry_ref & file,
44				BMimeType * io_mime_type,
45				float * out_quality,
46				int32 * out_internal_id);
47virtual	status_t SniffType(					//	This is broken if you deal with producers
48				const BMimeType & type,		//	and consumers both. Use SniffTypeKind instead.
49				float * out_quality,		//	If you implement SniffTypeKind, this doesn't
50				int32 * out_internal_id);	//	get called.
51virtual	status_t GetFileFormatList(
52				int32 flavor_id,			//	for this node flavor (if it matters)
53				media_file_format * out_writable_formats, 	//	don't write here if NULL
54				int32 in_write_items,		//	this many slots in out_writable_formats
55				int32 * out_write_items,	//	set this to actual # available, even if bigger than in count
56				media_file_format * out_readable_formats, 	//	don't write here if NULL
57				int32 in_read_items,		//	this many slots in out_readable_formats
58				int32 * out_read_items,		//	set this to actual # available, even if bigger than in count
59				void * _reserved);			//	ignore until further notice
60virtual	status_t SniffTypeKind(				//	Like SniffType, but for the specific kind(s)
61				const BMimeType & type,
62				uint64 in_kinds,
63				float * out_quality,
64				int32 * out_internal_id,
65				void * _reserved);
66
67
68/* end from BMediaAddOn */
69/************************/
70
71private:
72
73		MediaFileProducerAddOn(	/* private unimplemented */
74				const MediaFileProducerAddOn & clone);
75		MediaFileProducerAddOn & operator=(
76				const MediaFileProducerAddOn & clone);
77
78		/* Mmmh, stuffing! */
79virtual		status_t _Reserved_MediaFileProducerAddOn_0(void *);
80virtual		status_t _Reserved_MediaFileProducerAddOn_1(void *);
81virtual		status_t _Reserved_MediaFileProducerAddOn_2(void *);
82virtual		status_t _Reserved_MediaFileProducerAddOn_3(void *);
83virtual		status_t _Reserved_MediaFileProducerAddOn_4(void *);
84virtual		status_t _Reserved_MediaFileProducerAddOn_5(void *);
85virtual		status_t _Reserved_MediaFileProducerAddOn_6(void *);
86virtual		status_t _Reserved_MediaFileProducerAddOn_7(void *);
87virtual		status_t _Reserved_MediaFileProducerAddOn_8(void *);
88virtual		status_t _Reserved_MediaFileProducerAddOn_9(void *);
89virtual		status_t _Reserved_MediaFileProducerAddOn_10(void *);
90virtual		status_t _Reserved_MediaFileProducerAddOn_11(void *);
91virtual		status_t _Reserved_MediaFileProducerAddOn_12(void *);
92virtual		status_t _Reserved_MediaFileProducerAddOn_13(void *);
93virtual		status_t _Reserved_MediaFileProducerAddOn_14(void *);
94virtual		status_t _Reserved_MediaFileProducerAddOn_15(void *);
95
96		uint32 _reserved_media_file_node_[16];
97
98};
99
100#if BUILDING_MEDIA_FILE_PRODUCER__ADD_ON
101extern "C" _EXPORT BMediaAddOn * make_media_file_producer_add_on(image_id you);
102#endif
103
104#endif /* _MEDIA_FILE_PRODUCER_ADD_ON_H */
105