2 * Copyright 2012, Gerasim Troeglazov (3dEyes**), 3dEyes@gmail.com.
4 * Distributed under the terms of the MIT License.
7 #ifndef __EQUALIZER_NODE_H__
8 #define __EQUALIZER_NODE_H__
10 #include <Controllable.h>
11 #include <BufferProducer.h>
12 #include <BufferConsumer.h>
13 #include <MediaEventLooper.h>
15 #include "Equalizer.h"
20 #define BUFF_SIZE 0x2000
22 #define ID_AUDIO_INPUT 1
23 #define ID_AUDIO_OUTPUT 2
25 #define P_PREAMP_LABEL 100
29 #define P_BAND_LABELS 200
32 class EqualizerNode
: public BBufferConsumer
,
33 public BBufferProducer
,
35 public BMediaEventLooper
{
37 virtual ~EqualizerNode();
38 EqualizerNode(BMediaAddOn
* pAddOn
= NULL
);
41 virtual BMediaAddOn
*AddOn(int32
* id
) const;
42 virtual status_t
HandleMessage(int32 code
, const void* data
, size_t size
);
44 virtual void NodeRegistered();
47 virtual status_t
GetParameterValue(int32 id
, bigtime_t
* lastChangeTime
,
48 void* value
, size_t* size
);
49 virtual void SetParameterValue(int32 id
, bigtime_t changeTime
,
50 const void* value
, size_t size
);
53 virtual void BufferReceived(BBuffer
* buffer
);
54 virtual status_t
AcceptFormat(const media_destination
&dst
,
55 media_format
* format
);
56 virtual status_t
GetNextInput(int32
* cookie
, media_input
* input
);
57 virtual void DisposeInputCookie(int32 cookie
);
58 virtual status_t
FormatChanged(const media_source
&src
,
59 const media_destination
&dst
,
60 int32 change_tag
, const media_format
&format
);
61 virtual void ProducerDataStatus(const media_destination
&dst
,
64 virtual status_t
GetLatencyFor(const media_destination
&dst
,
66 media_node_id
* time_src
);
67 virtual status_t
Connected(const media_source
&src
,
68 const media_destination
&dst
,
69 const media_format
&format
,
71 virtual void Disconnected(const media_source
&src
,
72 const media_destination
&dst
);
75 virtual status_t
FormatSuggestionRequested(media_type type
,
76 int32 quality
, media_format
* format
);
77 virtual status_t
FormatProposal(const media_source
&src
,
78 media_format
* format
);
79 virtual status_t
FormatChangeRequested(const media_source
&src
,
80 const media_destination
&dst
,
83 virtual void LateNoticeReceived(const media_source
&src
,
84 bigtime_t late
, bigtime_t when
);
85 virtual status_t
GetNextOutput(int32
*cookie
, media_output
* output
);
86 virtual status_t
DisposeOutputCookie(int32 cookie
);
87 virtual status_t
SetBufferGroup(const media_source
&src
,
89 virtual status_t
PrepareToConnect(const media_source
&src
,
90 const media_destination
&dst
,
91 media_format
* format
, media_source
* source
,
93 virtual void Connect(status_t status
,
94 const media_source
&src
,
95 const media_destination
&dst
,
96 const media_format
&format
,
98 virtual void Disconnect(const media_source
&src
,
99 const media_destination
&dst
);
100 virtual void EnableOutput(const media_source
&src
,
101 bool enabled
, int32
* _deprecated_
);
102 virtual status_t
GetLatency(bigtime_t
* outLatency
);
103 virtual void LatencyChanged( const media_source
&src
,
104 const media_destination
&dst
,
105 bigtime_t latency
, uint32 flags
);
108 virtual bigtime_t
OfflineTime();
111 virtual void HandleEvent(const media_timed_event
* event
,
113 bool realTimeEvent
= false);
114 void ParameterEventProcessing(const media_timed_event
* event
);
115 status_t
ValidateFormat(const media_format
&preferred_format
,
116 media_format
&proposed_format
);
117 void SetOutputFormat(media_format
&format
);
118 virtual void InitParameterValues(void);
119 virtual void InitParameterWeb(void);
120 virtual void InitFilter(void);
121 virtual bigtime_t
GetFilterLatency(void);
122 virtual void FilterBuffer(BBuffer
* pBuffer
);
128 Equalizer fEqualizer
;
130 media_format fPreferredFormat
;
131 media_format fFormat
;
132 media_input fInputMedia
;
133 media_output fOutputMedia
;
138 bigtime_t fMuteLastChanged
;
139 bigtime_t fByPassLastChanged
;
140 bigtime_t fPreAmpLastChanged
;
141 bigtime_t fBandsLastChanged
[EQ_BANDS
];
143 bigtime_t fProcessLatency
;
144 bigtime_t fDownstreamLatency
;
145 bool fOutputMediaEnabled
;
148 #endif //__EQUALIZER_NODE_H__