1/*
2 * Copyright 2002 David Shipman,
3 * Copyright 2003-2007 Marcus Overhagen
4 * Copyright 2007 Haiku Inc. All rights reserved.
5 * Distributed under the terms of the MIT License.
6 */
7
8
9#include "MixerAddOn.h"
10
11#include <stdio.h>
12#include <string.h>
13
14#include <MediaRoster.h>
15#include <MediaNode.h>
16
17#include "AudioMixer.h"
18
19
20// instantiation function
21extern "C" _EXPORT BMediaAddOn* make_media_addon(image_id image) {
22	return new AudioMixerAddon(image);
23}
24
25
26AudioMixerAddon::AudioMixerAddon(image_id image)
27	:
28	BMediaAddOn(image),
29	fFormat(new media_format),
30	fInfo(new flavor_info)
31{
32	fFormat->type = B_MEDIA_RAW_AUDIO;
33	fFormat->u.raw_audio = media_raw_audio_format::wildcard;
34
35	fInfo->internal_id = 0;
36	fInfo->name = "Audio Mixer";
37	fInfo->info = "Audio Mixer media addon";
38	fInfo->kinds = B_BUFFER_PRODUCER | B_BUFFER_CONSUMER | B_SYSTEM_MIXER | B_CONTROLLABLE;
39	fInfo->flavor_flags = 0;	// 0 = global or local instantiation allowed, no restrictions
40	fInfo->possible_count = 0;	// 0 = infinite
41	fInfo->in_format_count = 1;
42	fInfo->in_formats = fFormat;
43	fInfo->out_format_count = 1;
44	fInfo->out_formats = fFormat;
45}
46
47
48AudioMixerAddon::~AudioMixerAddon()
49{
50	delete fFormat;
51	delete fInfo;
52}
53
54
55// #pragma mark - BMediaAddOn implementation
56
57
58status_t
59AudioMixerAddon::InitCheck(const char** out_failure_text)
60{
61	return B_OK;
62}
63
64
65int32
66AudioMixerAddon::CountFlavors()
67{
68	return 1;
69}
70
71
72status_t
73AudioMixerAddon::GetFlavorAt(int32 n, const flavor_info** out_info)
74{
75	// only the 0th flavor exists
76	if (n != 0)
77		return B_ERROR;
78
79	*out_info = fInfo;
80	return B_OK;
81}
82
83
84BMediaNode *
85AudioMixerAddon::InstantiateNodeFor(const flavor_info* info, BMessage* config,
86	status_t* out_error)
87{
88	return new AudioMixer(this, false);
89}
90
91
92status_t
93AudioMixerAddon::GetConfigurationFor(BMediaNode* your_node,
94	BMessage* into_message)
95{
96	// no config yet
97	return B_ERROR;
98}
99
100
101bool
102AudioMixerAddon::WantsAutoStart()
103{
104	return true;
105}
106
107
108status_t
109AudioMixerAddon::AutoStart(int in_index, BMediaNode **out_node,
110	int32 *out_internal_id, bool *out_has_more)
111{
112	*out_has_more = false;
113
114	if (in_index != 0)
115		return B_ERROR;
116
117	*out_internal_id = 0;
118	AudioMixer *mixer = new AudioMixer(this, true);
119	*out_node = mixer;
120
121	return B_OK;
122}
123