1// AbstractFileInterfaceAddOn.h
2//
3// Andrew Bachmann, 2002
4//
5// AbstractFileInterfaceAddOn is an add-on
6// that can make instances of AbstractFileInterfaceNode
7//
8// AbstractFileInterfaceNode handles a file and a multistream
9
10#if !defined(_ABSTRACT_FILE_INTERFACE_ADD_ON_H)
11#define _ABSTRACT_FILE_INTERFACE_ADD_ON_H
12
13#include <MediaDefs.h>
14#include <MediaAddOn.h>
15
16class AbstractFileInterfaceAddOn :
17    public BMediaAddOn
18{
19public:
20	virtual ~AbstractFileInterfaceAddOn(void);
21	explicit AbstractFileInterfaceAddOn(image_id image);
22
23/**************************/
24/* begin from BMediaAddOn */
25public:
26virtual	status_t InitCheck(
27				const char ** out_failure_text);
28virtual	int32 CountFlavors(void);
29virtual	status_t GetFlavorAt(
30				int32 n,
31				const flavor_info ** out_info);
32virtual	BMediaNode * InstantiateNodeFor(
33				const flavor_info * info,
34				BMessage * config,
35				status_t * out_error) = 0;
36virtual	status_t GetConfigurationFor(
37				BMediaNode * your_node,
38				BMessage * into_message);
39virtual	bool WantsAutoStart(void);
40virtual	status_t AutoStart(
41				int in_count,
42				BMediaNode ** out_node,
43				int32 * out_internal_id,
44				bool * out_has_more);
45
46/* only implement if you have a B_FILE_INTERFACE node */
47virtual	status_t SniffRef(
48				const entry_ref & file,
49				BMimeType * io_mime_type,
50				float * out_quality,
51				int32 * out_internal_id);
52virtual	status_t SniffType(					//	This is broken if you deal with producers
53				const BMimeType & type,		//	and consumers both. Use SniffTypeKind instead.
54				float * out_quality,		//	If you implement SniffTypeKind, this doesn't
55				int32 * out_internal_id);	//	get called.
56virtual	status_t GetFileFormatList(
57				int32 flavor_id,			//	for this node flavor (if it matters)
58				media_file_format * out_writable_formats, 	//	don't write here if NULL
59				int32 in_write_items,		//	this many slots in out_writable_formats
60				int32 * out_write_items,	//	set this to actual # available, even if bigger than in count
61				media_file_format * out_readable_formats, 	//	don't write here if NULL
62				int32 in_read_items,		//	this many slots in out_readable_formats
63				int32 * out_read_items,		//	set this to actual # available, even if bigger than in count
64				void * _reserved);			//	ignore until further notice
65virtual	status_t SniffTypeKind(				//	Like SniffType, but for the specific kind(s)
66				const BMimeType & type,
67				uint64 in_kinds,
68				float * out_quality,
69				int32 * out_internal_id,
70				void * _reserved) = 0;
71virtual	status_t SniffTypeKind(				//	Like SniffType, but for the specific kind(s)
72				const BMimeType & type,
73				uint64 in_kinds,
74				uint64 io_kind,
75				float * out_quality,
76				int32 * out_internal_id,
77				void * _reserved);
78
79
80/* end from BMediaAddOn */
81/************************/
82
83private:
84
85		AbstractFileInterfaceAddOn(	/* private unimplemented */
86				const AbstractFileInterfaceAddOn & clone);
87		AbstractFileInterfaceAddOn & operator=(
88				const AbstractFileInterfaceAddOn & clone);
89
90		int32 refCount;
91
92		/* Mmmh, stuffing! */
93virtual		status_t _Reserved_AbstractFileInterfaceAddOn_0(void *);
94virtual		status_t _Reserved_AbstractFileInterfaceAddOn_1(void *);
95virtual		status_t _Reserved_AbstractFileInterfaceAddOn_2(void *);
96virtual		status_t _Reserved_AbstractFileInterfaceAddOn_3(void *);
97virtual		status_t _Reserved_AbstractFileInterfaceAddOn_4(void *);
98virtual		status_t _Reserved_AbstractFileInterfaceAddOn_5(void *);
99virtual		status_t _Reserved_AbstractFileInterfaceAddOn_6(void *);
100virtual		status_t _Reserved_AbstractFileInterfaceAddOn_7(void *);
101virtual		status_t _Reserved_AbstractFileInterfaceAddOn_8(void *);
102virtual		status_t _Reserved_AbstractFileInterfaceAddOn_9(void *);
103virtual		status_t _Reserved_AbstractFileInterfaceAddOn_10(void *);
104virtual		status_t _Reserved_AbstractFileInterfaceAddOn_11(void *);
105virtual		status_t _Reserved_AbstractFileInterfaceAddOn_12(void *);
106virtual		status_t _Reserved_AbstractFileInterfaceAddOn_13(void *);
107virtual		status_t _Reserved_AbstractFileInterfaceAddOn_14(void *);
108virtual		status_t _Reserved_AbstractFileInterfaceAddOn_15(void *);
109
110		uint32 _reserved_abstract_file_interface_add_on_[16];
111
112};
113
114#if BUILDING_ABSTRACT_FILE_INTERFACE__ADD_ON
115extern "C" _EXPORT BMediaAddOn * make_abstract_file_interface_add_on(image_id you);
116#endif
117
118#endif /* _ABSTRACT_FILE_INTERFACE_ADD_ON_H */
119