Coding style fixes, should have no functional changes.
This commit is contained in:
parent
909edb9aad
commit
762025fa02
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright 2012, Gerasim Troeglazov (3dEyes**), 3dEyes@gmail.com. All rights reserved.
|
||||
* Copyright 2012, Gerasim Troeglazov (3dEyes**), 3dEyes@gmail.com.
|
||||
* All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
@ -16,11 +17,14 @@
|
||||
#include "EqualizerNode.h"
|
||||
|
||||
//EqualizerNode
|
||||
EqualizerNode::~EqualizerNode() {
|
||||
EqualizerNode::~EqualizerNode()
|
||||
{
|
||||
Quit();
|
||||
}
|
||||
|
||||
EqualizerNode::EqualizerNode(BMediaAddOn* addon) :
|
||||
|
||||
EqualizerNode::EqualizerNode(BMediaAddOn* addon)
|
||||
:
|
||||
BMediaNode("10 Band Equalizer"),
|
||||
BBufferConsumer(B_MEDIA_RAW_AUDIO),
|
||||
BBufferProducer(B_MEDIA_RAW_AUDIO),
|
||||
@ -33,30 +37,32 @@ EqualizerNode::EqualizerNode(BMediaAddOn* addon) :
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//BMediaNode
|
||||
BMediaAddOn*
|
||||
EqualizerNode::AddOn(int32 *id) const
|
||||
EqualizerNode::AddOn(int32* id) const
|
||||
{
|
||||
if(fAddOn)
|
||||
if (fAddOn)
|
||||
*id = 0;
|
||||
return fAddOn;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::HandleMessage(int32 message, const void *data, size_t size)
|
||||
{
|
||||
if((BControllable::HandleMessage(message, data, size)!=B_OK) &&
|
||||
if ((BControllable::HandleMessage(message, data, size) != B_OK) &&
|
||||
(BBufferConsumer::HandleMessage(message, data, size) != B_OK) &&
|
||||
(BBufferProducer::HandleMessage(message, data, size) != B_OK) &&
|
||||
(BControllable::HandleMessage(message, data, size) != B_OK) ) {
|
||||
BMediaNode::HandleMessage(message, data, size);
|
||||
(BControllable::HandleMessage(message, data, size) != B_OK)) {
|
||||
BMediaNode::HandleMessage(message, data, size);
|
||||
return B_OK;
|
||||
} else {
|
||||
BMediaNode::HandleBadMessage(message, data, size);
|
||||
return B_ERROR;
|
||||
}
|
||||
}
|
||||
BMediaNode::HandleBadMessage(message, data, size);
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::NodeRegistered()
|
||||
{
|
||||
@ -66,7 +72,8 @@ EqualizerNode::NodeRegistered()
|
||||
fPreferredFormat.type = B_MEDIA_RAW_AUDIO;
|
||||
fPreferredFormat.u.raw_audio.buffer_size = BUFF_SIZE;
|
||||
fPreferredFormat.u.raw_audio = media_raw_audio_format::wildcard;
|
||||
fPreferredFormat.u.raw_audio.channel_count = media_raw_audio_format::wildcard.channel_count;
|
||||
fPreferredFormat.u.raw_audio.channel_count =
|
||||
media_raw_audio_format::wildcard.channel_count;
|
||||
fPreferredFormat.u.raw_audio.format = media_raw_audio_format::B_AUDIO_FLOAT;
|
||||
|
||||
fFormat.type = B_MEDIA_RAW_AUDIO;
|
||||
@ -90,146 +97,153 @@ EqualizerNode::NodeRegistered()
|
||||
InitParameterWeb();
|
||||
}
|
||||
|
||||
|
||||
//BControllable
|
||||
status_t
|
||||
EqualizerNode::GetParameterValue(int32 id, bigtime_t *lastChangeTime, void *value, size_t *size)
|
||||
EqualizerNode::GetParameterValue(int32 id, bigtime_t* lastChangeTime,
|
||||
void* value, size_t* size)
|
||||
{
|
||||
if(*size < sizeof(float)) {
|
||||
if (*size < sizeof(float))
|
||||
return B_NO_MEMORY;
|
||||
}
|
||||
|
||||
if(id == P_MUTE) {
|
||||
if (id == P_MUTE) {
|
||||
*(int32*)value = fMute;
|
||||
*lastChangeTime = fMuteLastChanged;
|
||||
*size = sizeof(int32);
|
||||
return B_OK;
|
||||
} else if(id == P_BYPASS) {
|
||||
} else if (id == P_BYPASS) {
|
||||
*(int32*)value = fByPass;
|
||||
*lastChangeTime = fByPassLastChanged;
|
||||
*size = sizeof(int32);
|
||||
return B_OK;
|
||||
} else if(id == P_PREAMP) {
|
||||
} else if (id == P_PREAMP) {
|
||||
*(float*)value = (float)fEqualizer.PreAmp();
|
||||
*lastChangeTime = fPreAmpLastChanged;
|
||||
*size = sizeof(float);
|
||||
return B_OK;
|
||||
} else if(id >= P_BANDS && id < P_BANDS + fEqualizer.BandCount()) {
|
||||
} else if (id >= P_BANDS && id < P_BANDS + fEqualizer.BandCount()) {
|
||||
int band = id - P_BANDS;
|
||||
*(float*)value = (float)fEqualizer.Band(band);
|
||||
*lastChangeTime = fBandsLastChanged[band];
|
||||
*size = sizeof(float);
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
return B_ERROR;
|
||||
} else
|
||||
return B_ERROR;
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::SetParameterValue(int32 id, bigtime_t time, const void *value, size_t size)
|
||||
EqualizerNode::SetParameterValue(int32 id, bigtime_t time, const void* value,
|
||||
size_t size)
|
||||
{
|
||||
if(id == P_PREAMP || id == P_BYPASS || id == P_MUTE ||
|
||||
(id >= P_BANDS && id < P_BANDS + fEqualizer.BandCount())) {
|
||||
if (id == P_PREAMP || id == P_BYPASS || id == P_MUTE
|
||||
|| (id >= P_BANDS && id < P_BANDS + fEqualizer.BandCount())) {
|
||||
media_timed_event ev(time, BTimedEventQueue::B_PARAMETER, (void*)value,
|
||||
BTimedEventQueue::B_NO_CLEANUP, size, id, "EQ");
|
||||
ParameterEventProcessing(&ev); //dirty hack for parameter processing (mediakit bug????)
|
||||
ParameterEventProcessing(&ev);
|
||||
//dirty hack for parameter processing (mediakit bug????)
|
||||
EventQueue()->AddEvent(ev);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//BBufferConsumer
|
||||
void
|
||||
EqualizerNode::BufferReceived(BBuffer *buffer)
|
||||
EqualizerNode::BufferReceived(BBuffer* buffer)
|
||||
{
|
||||
if(buffer->Header()->destination != fInputMedia.destination.id) {
|
||||
if (buffer->Header()->destination != fInputMedia.destination.id) {
|
||||
buffer->Recycle();
|
||||
return;
|
||||
}
|
||||
|
||||
if(fOutputMedia.destination == media_destination::null || !fOutputMediaEnabled) {
|
||||
if (fOutputMedia.destination == media_destination::null
|
||||
|| !fOutputMediaEnabled) {
|
||||
buffer->Recycle();
|
||||
return;
|
||||
}
|
||||
|
||||
FilterBuffer(buffer);
|
||||
|
||||
status_t err = SendBuffer(buffer, fOutputMedia.source, fOutputMedia.destination);
|
||||
if (err < B_OK) {
|
||||
status_t err = SendBuffer(buffer, fOutputMedia.source,
|
||||
fOutputMedia.destination);
|
||||
if (err < B_OK)
|
||||
buffer->Recycle();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::AcceptFormat(const media_destination &dst, media_format *format)
|
||||
EqualizerNode::AcceptFormat(const media_destination &dst, media_format* format)
|
||||
{
|
||||
if(dst != fInputMedia.destination) {
|
||||
if (dst != fInputMedia.destination)
|
||||
return B_MEDIA_BAD_DESTINATION;
|
||||
}
|
||||
if(format->type != B_MEDIA_RAW_AUDIO) {
|
||||
return B_MEDIA_BAD_FORMAT;
|
||||
}
|
||||
|
||||
ValidateFormat((fFormat.u.raw_audio.format != media_raw_audio_format::wildcard.format) ?
|
||||
fFormat : fPreferredFormat, *format);
|
||||
|
||||
if (format->type != B_MEDIA_RAW_AUDIO)
|
||||
return B_MEDIA_BAD_FORMAT;
|
||||
|
||||
ValidateFormat((fFormat.u.raw_audio.format
|
||||
!= media_raw_audio_format::wildcard.format) ?
|
||||
fFormat : fPreferredFormat, *format);
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::GetNextInput(int32* cookie, media_input* input)
|
||||
{
|
||||
if(*cookie) {
|
||||
if (*cookie)
|
||||
return B_BAD_INDEX;
|
||||
}
|
||||
|
||||
++*cookie;
|
||||
*input = fInputMedia;
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::DisposeInputCookie(int32 cookie)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::FormatChanged(const media_source &src, const media_destination &dst,
|
||||
int32 changeTag, const media_format &format)
|
||||
EqualizerNode::FormatChanged(const media_source &src,
|
||||
const media_destination &dst, int32 changeTag, const media_format &format)
|
||||
{
|
||||
return B_MEDIA_BAD_FORMAT;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::ProducerDataStatus(const media_destination &dst, int32 status, bigtime_t when)
|
||||
EqualizerNode::ProducerDataStatus(const media_destination &dst, int32 status,
|
||||
bigtime_t when)
|
||||
{
|
||||
if(fOutputMedia.destination != media_destination::null) {
|
||||
if (fOutputMedia.destination != media_destination::null)
|
||||
SendDataStatus(status, fOutputMedia.destination, when);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::GetLatencyFor( const media_destination &dst, bigtime_t *latency,
|
||||
media_node_id* outTimeSource)
|
||||
EqualizerNode::GetLatencyFor(const media_destination &dst, bigtime_t* latency,
|
||||
media_node_id* outTimeSource)
|
||||
{
|
||||
|
||||
if(dst != fInputMedia.destination) {
|
||||
if (dst != fInputMedia.destination)
|
||||
return B_MEDIA_BAD_DESTINATION;
|
||||
}
|
||||
|
||||
*latency = fDownstreamLatency + fProcessLatency;
|
||||
*outTimeSource = TimeSource()->ID();
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::Connected(const media_source& source,
|
||||
const media_destination& destination, const media_format& format,
|
||||
media_input* poInput)
|
||||
{
|
||||
if(destination != fInputMedia.destination) {
|
||||
if (destination != fInputMedia.destination)
|
||||
return B_MEDIA_BAD_DESTINATION;
|
||||
}
|
||||
if(fInputMedia.source != media_source::null) {
|
||||
|
||||
if (fInputMedia.source != media_source::null)
|
||||
return B_MEDIA_ALREADY_CONNECTED;
|
||||
}
|
||||
|
||||
fInputMedia.source = source;
|
||||
fInputMedia.format = format;
|
||||
@ -239,125 +253,132 @@ EqualizerNode::Connected(const media_source& source,
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::Disconnected(const media_source &src, const media_destination &dst)
|
||||
EqualizerNode::Disconnected(const media_source &src,
|
||||
const media_destination &dst)
|
||||
{
|
||||
if(fInputMedia.source != src || dst != fInputMedia.destination) {
|
||||
if (fInputMedia.source != src || dst != fInputMedia.destination)
|
||||
return;
|
||||
}
|
||||
|
||||
fInputMedia.source = media_source::null;
|
||||
|
||||
if(fOutputMedia.destination == media_destination::null) {
|
||||
|
||||
if (fOutputMedia.destination == media_destination::null)
|
||||
fFormat.u.raw_audio = media_raw_audio_format::wildcard;
|
||||
}
|
||||
|
||||
fInputMedia.format = fFormat;
|
||||
}
|
||||
|
||||
|
||||
//BBufferProducer
|
||||
status_t
|
||||
EqualizerNode::FormatSuggestionRequested(media_type type, int32 quality, media_format *format)
|
||||
EqualizerNode::FormatSuggestionRequested(media_type type, int32 quality,
|
||||
media_format* format)
|
||||
{
|
||||
if(type != B_MEDIA_RAW_AUDIO) {
|
||||
if (type != B_MEDIA_RAW_AUDIO)
|
||||
return B_MEDIA_BAD_FORMAT;
|
||||
}
|
||||
|
||||
if(fFormat.u.raw_audio.format != media_raw_audio_format::wildcard.format) {
|
||||
if (fFormat.u.raw_audio.format != media_raw_audio_format::wildcard.format)
|
||||
*format = fFormat;
|
||||
} else {
|
||||
else
|
||||
*format = fPreferredFormat;
|
||||
}
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::FormatProposal(const media_source &src, media_format* format)
|
||||
{
|
||||
if(src != fOutputMedia.source) {
|
||||
if (src != fOutputMedia.source)
|
||||
return B_MEDIA_BAD_SOURCE;
|
||||
}
|
||||
|
||||
if(format->type != B_MEDIA_RAW_AUDIO) {
|
||||
if (format->type != B_MEDIA_RAW_AUDIO)
|
||||
return B_MEDIA_BAD_FORMAT;
|
||||
}
|
||||
|
||||
ValidateFormat((fFormat.u.raw_audio.format != media_raw_audio_format::wildcard.format) ?
|
||||
fFormat:fPreferredFormat,*format);
|
||||
ValidateFormat((fFormat.u.raw_audio.format
|
||||
!= media_raw_audio_format::wildcard.format) ?
|
||||
fFormat:fPreferredFormat, *format);
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::FormatChangeRequested(const media_source &src, const media_destination &dst,
|
||||
media_format* format, int32* _deprecated_)
|
||||
EqualizerNode::FormatChangeRequested(const media_source &src,
|
||||
const media_destination &dst, media_format* format, int32* _deprecated_)
|
||||
{
|
||||
return B_MEDIA_BAD_FORMAT;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::LateNoticeReceived(const media_source &src, bigtime_t late, bigtime_t when)
|
||||
EqualizerNode::LateNoticeReceived(const media_source &src, bigtime_t late,
|
||||
bigtime_t when)
|
||||
{
|
||||
if(src != fOutputMedia.source || fInputMedia.source == media_source::null) {
|
||||
if (src != fOutputMedia.source || fInputMedia.source == media_source::null)
|
||||
return;
|
||||
}
|
||||
|
||||
NotifyLateProducer(fInputMedia.source, late, when);
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::GetNextOutput(int32 *cookie, media_output* output)
|
||||
EqualizerNode::GetNextOutput(int32* cookie, media_output* output)
|
||||
{
|
||||
if(*cookie) {
|
||||
if (*cookie)
|
||||
return B_BAD_INDEX;
|
||||
}
|
||||
|
||||
++*cookie;
|
||||
*output = fOutputMedia;
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::DisposeOutputCookie(int32 cookie)
|
||||
{
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::SetBufferGroup(const media_source &src, BBufferGroup *group)
|
||||
EqualizerNode::SetBufferGroup(const media_source &src, BBufferGroup* group)
|
||||
{
|
||||
int32 changeTag;
|
||||
status_t ret = B_OK;
|
||||
|
||||
if(src != fOutputMedia.source) {
|
||||
if (src != fOutputMedia.source)
|
||||
return B_MEDIA_BAD_SOURCE;
|
||||
}
|
||||
if(fInputMedia.source == media_source::null) {
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
ret = SetOutputBuffersFor(fInputMedia.source, fInputMedia.destination, group, 0, &changeTag);
|
||||
if (fInputMedia.source == media_source::null)
|
||||
return B_ERROR;
|
||||
|
||||
ret = SetOutputBuffersFor(fInputMedia.source, fInputMedia.destination,
|
||||
group, 0, &changeTag);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::PrepareToConnect( const media_source &src, const media_destination &dst,
|
||||
media_format* format, media_source* outSource, char* outName)
|
||||
EqualizerNode::PrepareToConnect(const media_source &src,
|
||||
const media_destination &dst, media_format* format, media_source* outSource,
|
||||
char* outName)
|
||||
{
|
||||
if(src != fOutputMedia.source) {
|
||||
if (src != fOutputMedia.source)
|
||||
return B_MEDIA_BAD_SOURCE;
|
||||
}
|
||||
|
||||
if(format->type != B_MEDIA_RAW_AUDIO) {
|
||||
if (format->type != B_MEDIA_RAW_AUDIO)
|
||||
return B_MEDIA_BAD_FORMAT;
|
||||
}
|
||||
|
||||
if(fOutputMedia.destination != media_destination::null) {
|
||||
if (fOutputMedia.destination != media_destination::null)
|
||||
return B_MEDIA_ALREADY_CONNECTED;
|
||||
}
|
||||
|
||||
status_t err = ValidateFormat((fFormat.u.raw_audio.format != media_raw_audio_format::wildcard.format) ?
|
||||
fFormat : fPreferredFormat, *format);
|
||||
status_t err = ValidateFormat((fFormat.u.raw_audio.format
|
||||
!= media_raw_audio_format::wildcard.format) ? fFormat
|
||||
: fPreferredFormat, *format);
|
||||
|
||||
if(err < B_OK) {
|
||||
if (err < B_OK)
|
||||
return err;
|
||||
}
|
||||
|
||||
SetOutputFormat(*format);
|
||||
|
||||
@ -370,12 +391,13 @@ EqualizerNode::PrepareToConnect( const media_source &src, const media_destinatio
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::Connect(status_t status, const media_source &src, const media_destination &dst,
|
||||
const media_format &format, char *outName)
|
||||
EqualizerNode::Connect(status_t status, const media_source &src,
|
||||
const media_destination &dst, const media_format &format, char* outName)
|
||||
{
|
||||
status_t err;
|
||||
if(status < B_OK) {
|
||||
if (status < B_OK) {
|
||||
fOutputMedia.destination = media_destination::null;
|
||||
return;
|
||||
}
|
||||
@ -385,86 +407,87 @@ EqualizerNode::Connect(status_t status, const media_source &src, const media_des
|
||||
fFormat = format;
|
||||
|
||||
media_node_id timeSource;
|
||||
err = FindLatencyFor(fOutputMedia.destination, &fDownstreamLatency, &timeSource);
|
||||
err = FindLatencyFor(fOutputMedia.destination, &fDownstreamLatency,
|
||||
&timeSource);
|
||||
|
||||
InitFilter();
|
||||
|
||||
fProcessLatency = GetFilterLatency();
|
||||
SetEventLatency(fDownstreamLatency + fProcessLatency);
|
||||
|
||||
if(fInputMedia.source != media_source::null) {
|
||||
if (fInputMedia.source != media_source::null) {
|
||||
SendLatencyChange(fInputMedia.source, fInputMedia.destination,
|
||||
EventLatency() + SchedulingLatency());
|
||||
EventLatency() + SchedulingLatency());
|
||||
}
|
||||
|
||||
bigtime_t duration = 0;
|
||||
|
||||
int sample_size = (fFormat.u.raw_audio.format & 0xf) *
|
||||
fFormat.u.raw_audio.channel_count;
|
||||
int sample_size = (fFormat.u.raw_audio.format & 0xf)
|
||||
* fFormat.u.raw_audio.channel_count;
|
||||
|
||||
if (fFormat.u.raw_audio.buffer_size > 0 &&
|
||||
fFormat.u.raw_audio.frame_rate > 0 &&
|
||||
sample_size > 0) {
|
||||
duration = (bigtime_t)(((fFormat.u.raw_audio.buffer_size / sample_size) /
|
||||
fFormat.u.raw_audio.frame_rate) * 1000000.0);
|
||||
if (fFormat.u.raw_audio.buffer_size > 0
|
||||
&& fFormat.u.raw_audio.frame_rate > 0 && sample_size > 0) {
|
||||
duration = (bigtime_t)(((fFormat.u.raw_audio.buffer_size / sample_size)
|
||||
/ fFormat.u.raw_audio.frame_rate) * 1000000.0);
|
||||
}
|
||||
|
||||
|
||||
SetBufferDuration(duration);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::Disconnect(const media_source &src, const media_destination &dst)
|
||||
{
|
||||
if(src != fOutputMedia.source) {
|
||||
if (src != fOutputMedia.source)
|
||||
return;
|
||||
}
|
||||
|
||||
if(dst != fOutputMedia.destination) {
|
||||
if (dst != fOutputMedia.destination)
|
||||
return;
|
||||
}
|
||||
|
||||
fOutputMedia.destination = media_destination::null;
|
||||
|
||||
if(fInputMedia.source == media_source::null) {
|
||||
if (fInputMedia.source == media_source::null)
|
||||
fFormat.u.raw_audio = media_raw_audio_format::wildcard;
|
||||
}
|
||||
|
||||
fOutputMedia.format = fFormat;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::EnableOutput(const media_source &src, bool enabled, int32* _deprecated_)
|
||||
EqualizerNode::EnableOutput(const media_source &src, bool enabled,
|
||||
int32* _deprecated_)
|
||||
{
|
||||
if(src != fOutputMedia.source) {
|
||||
if (src != fOutputMedia.source)
|
||||
return;
|
||||
}
|
||||
fOutputMediaEnabled = enabled;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::GetLatency(bigtime_t *latency)
|
||||
EqualizerNode::GetLatency(bigtime_t* latency)
|
||||
{
|
||||
*latency = EventLatency() + SchedulingLatency();
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::LatencyChanged(const media_source &src, const media_destination &dst,
|
||||
bigtime_t latency, uint32 flags)
|
||||
EqualizerNode::LatencyChanged(const media_source &src,
|
||||
const media_destination &dst, bigtime_t latency, uint32 flags)
|
||||
{
|
||||
if(src != fOutputMedia.source || dst != fOutputMedia.destination) {
|
||||
if (src != fOutputMedia.source || dst != fOutputMedia.destination)
|
||||
return;
|
||||
}
|
||||
|
||||
fDownstreamLatency = latency;
|
||||
SetEventLatency(fDownstreamLatency + fProcessLatency);
|
||||
|
||||
if(fInputMedia.source != media_source::null) {
|
||||
if (fInputMedia.source != media_source::null) {
|
||||
SendLatencyChange(fInputMedia.source,
|
||||
fInputMedia.destination,EventLatency() + SchedulingLatency());
|
||||
fInputMedia.destination,EventLatency() + SchedulingLatency());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//BMediaEventLooper
|
||||
bigtime_t
|
||||
EqualizerNode::OfflineTime()
|
||||
@ -472,17 +495,17 @@ EqualizerNode::OfflineTime()
|
||||
return 0LL;
|
||||
}
|
||||
|
||||
|
||||
//EqualizerNode
|
||||
void
|
||||
EqualizerNode::HandleEvent(const media_timed_event *event, bigtime_t late, bool realTime)
|
||||
EqualizerNode::HandleEvent(const media_timed_event* event, bigtime_t late,
|
||||
bool realTime)
|
||||
{
|
||||
if(event->type == BTimedEventQueue::B_PARAMETER) {
|
||||
if (event->type == BTimedEventQueue::B_PARAMETER)
|
||||
ParameterEventProcessing(event);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::ParameterEventProcessing(const media_timed_event* event)
|
||||
{
|
||||
@ -495,40 +518,40 @@ EqualizerNode::ParameterEventProcessing(const media_timed_event* event)
|
||||
|
||||
type_code v_type = B_FLOAT_TYPE;
|
||||
|
||||
BParameter *web_param;
|
||||
BParameter* web_param;
|
||||
|
||||
for(int i=0; i<fWeb->CountParameters(); i++) {
|
||||
for (int i = 0; i < fWeb->CountParameters(); i++) {
|
||||
web_param = fWeb->ParameterAt(i);
|
||||
if(web_param->ID() == id) {
|
||||
if (web_param->ID() == id) {
|
||||
v_type=web_param->ValueType();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(v_type == B_FLOAT_TYPE)
|
||||
if (v_type == B_FLOAT_TYPE)
|
||||
value = *((float*)event->pointer);
|
||||
if(v_type == B_INT32_TYPE) {
|
||||
else if (v_type == B_INT32_TYPE) {
|
||||
value32 = *((int32*)event->pointer);
|
||||
value = (float)value32;
|
||||
}
|
||||
|
||||
if(id == P_MUTE) {
|
||||
if (id == P_MUTE) {
|
||||
fMute = value32;
|
||||
fMuteLastChanged = now;
|
||||
BroadcastNewParameterValue(now, id, event->pointer, size);
|
||||
} else if(id == P_BYPASS) {
|
||||
} else if (id == P_BYPASS) {
|
||||
fByPass = value32;
|
||||
fByPassLastChanged = now;
|
||||
BroadcastNewParameterValue(now, id, event->pointer, size);
|
||||
} else if(id == P_PREAMP) {
|
||||
if(value != fEqualizer.PreAmp()) {
|
||||
} else if (id == P_PREAMP) {
|
||||
if (value != fEqualizer.PreAmp()) {
|
||||
fEqualizer.SetPreAmp(value);
|
||||
fPreAmpLastChanged = now;
|
||||
BroadcastNewParameterValue(now, id, &value, size);
|
||||
}
|
||||
} else if(id >= P_BANDS && id < P_BANDS + fEqualizer.BandCount()) {
|
||||
} else if (id >= P_BANDS && id < P_BANDS + fEqualizer.BandCount()) {
|
||||
int band = id - P_BANDS;
|
||||
if(value != fEqualizer.Band(band)) {
|
||||
if (value != fEqualizer.Band(band)) {
|
||||
fEqualizer.SetBand(band, value);
|
||||
fBandsLastChanged[band] = now;
|
||||
BroadcastNewParameterValue(now, id, &value, size);
|
||||
@ -536,13 +559,14 @@ EqualizerNode::ParameterEventProcessing(const media_timed_event* event)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
EqualizerNode::ValidateFormat(const media_format &preferredFormat,
|
||||
media_format &format)
|
||||
media_format &format)
|
||||
{
|
||||
status_t ret = B_OK;
|
||||
|
||||
if(format.type != B_MEDIA_RAW_AUDIO) {
|
||||
if (format.type != B_MEDIA_RAW_AUDIO) {
|
||||
format = preferredFormat;
|
||||
return B_MEDIA_BAD_FORMAT;
|
||||
}
|
||||
@ -551,75 +575,70 @@ EqualizerNode::ValidateFormat(const media_format &preferredFormat,
|
||||
media_raw_audio_format &f = format.u.raw_audio;
|
||||
const media_raw_audio_format &pref = format.u.raw_audio;
|
||||
|
||||
if(pref.frame_rate != wild.frame_rate && f.frame_rate != pref.frame_rate) {
|
||||
if(f.frame_rate != wild.frame_rate) {
|
||||
if (pref.frame_rate != wild.frame_rate && f.frame_rate != pref.frame_rate) {
|
||||
if (f.frame_rate != wild.frame_rate)
|
||||
ret = B_MEDIA_BAD_FORMAT;
|
||||
}
|
||||
f.frame_rate = pref.frame_rate;
|
||||
}
|
||||
|
||||
if(pref.channel_count != wild.channel_count && f.channel_count != pref.channel_count) {
|
||||
if(f.channel_count != wild.channel_count) {
|
||||
if (pref.channel_count != wild.channel_count
|
||||
&& f.channel_count != pref.channel_count) {
|
||||
if (f.channel_count != wild.channel_count)
|
||||
ret = B_MEDIA_BAD_FORMAT;
|
||||
}
|
||||
f.channel_count = pref.channel_count;
|
||||
}
|
||||
|
||||
if(pref.byte_order != wild.byte_order && f.byte_order != pref.byte_order) {
|
||||
if(f.byte_order != wild.byte_order) {
|
||||
if (pref.byte_order != wild.byte_order && f.byte_order != pref.byte_order) {
|
||||
if (f.byte_order != wild.byte_order)
|
||||
ret = B_MEDIA_BAD_FORMAT;
|
||||
}
|
||||
f.byte_order = pref.byte_order;
|
||||
}
|
||||
|
||||
if(pref.format != wild.format && f.format != pref.format) {
|
||||
if(f.format != wild.format) {
|
||||
if (pref.format != wild.format && f.format != pref.format) {
|
||||
if (f.format != wild.format)
|
||||
ret = B_MEDIA_BAD_FORMAT;
|
||||
}
|
||||
f.format = pref.format;
|
||||
}
|
||||
|
||||
if(pref.buffer_size != wild.buffer_size && f.buffer_size != pref.buffer_size) {
|
||||
if(f.buffer_size != wild.buffer_size) {
|
||||
if (pref.buffer_size != wild.buffer_size
|
||||
&& f.buffer_size != pref.buffer_size) {
|
||||
if (f.buffer_size != wild.buffer_size)
|
||||
ret = B_MEDIA_BAD_FORMAT;
|
||||
}
|
||||
f.buffer_size = pref.buffer_size;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::SetOutputFormat(media_format &format)
|
||||
{
|
||||
media_raw_audio_format &f = format.u.raw_audio;
|
||||
media_raw_audio_format &w = media_raw_audio_format::wildcard;
|
||||
|
||||
if(f.frame_rate == w.frame_rate) {
|
||||
if (f.frame_rate == w.frame_rate)
|
||||
f.frame_rate = 44100.0;
|
||||
}
|
||||
|
||||
if(f.channel_count == w.channel_count) {
|
||||
if(fInputMedia.source != media_source::null) {
|
||||
if (f.channel_count == w.channel_count) {
|
||||
if (fInputMedia.source != media_source::null)
|
||||
f.channel_count = fInputMedia.format.u.raw_audio.channel_count;
|
||||
} else {
|
||||
else
|
||||
f.channel_count = 2;
|
||||
}
|
||||
}
|
||||
|
||||
if(f.format == w.format) {
|
||||
if (f.format == w.format)
|
||||
f.format = media_raw_audio_format::B_AUDIO_FLOAT;
|
||||
}
|
||||
|
||||
if(f.byte_order == w.format) {
|
||||
f.byte_order = (B_HOST_IS_BENDIAN) ? B_MEDIA_BIG_ENDIAN : B_MEDIA_LITTLE_ENDIAN;
|
||||
}
|
||||
if (f.byte_order == w.format)
|
||||
f.byte_order = (B_HOST_IS_BENDIAN) ? B_MEDIA_BIG_ENDIAN
|
||||
: B_MEDIA_LITTLE_ENDIAN;
|
||||
|
||||
if(f.buffer_size == w.buffer_size) {
|
||||
if (f.buffer_size == w.buffer_size)
|
||||
f.buffer_size = BUFF_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::InitParameterValues()
|
||||
{
|
||||
@ -629,44 +648,46 @@ EqualizerNode::InitParameterValues()
|
||||
fByPassLastChanged = 0LL;
|
||||
fPreAmpLastChanged = 0LL;
|
||||
|
||||
for(int i=0;i<EQ_BANDS;i++) {
|
||||
for (int i = 0; i < EQ_BANDS; i++)
|
||||
fBandsLastChanged[i] = 0LL;
|
||||
}
|
||||
|
||||
fEqualizer.CleanUp();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::InitParameterWeb(void)
|
||||
{
|
||||
fWeb = new BParameterWeb();
|
||||
|
||||
BParameterGroup *fParamGroup = fWeb->MakeGroup("EqualizerNode Parameters");
|
||||
BParameterGroup *fFControlGroup = fParamGroup->MakeGroup("FilterControl");
|
||||
BParameterGroup* fParamGroup = fWeb->MakeGroup("EqualizerNode Parameters");
|
||||
BParameterGroup* fFControlGroup = fParamGroup->MakeGroup("FilterControl");
|
||||
|
||||
fFControlGroup->MakeDiscreteParameter(P_MUTE,B_MEDIA_NO_TYPE,"Mute", B_ENABLE);
|
||||
fFControlGroup->MakeDiscreteParameter(P_BYPASS,B_MEDIA_NO_TYPE,"ByPass", B_ENABLE);
|
||||
fFControlGroup->MakeDiscreteParameter(P_MUTE,B_MEDIA_NO_TYPE,"Mute",
|
||||
B_ENABLE);
|
||||
fFControlGroup->MakeDiscreteParameter(P_BYPASS,B_MEDIA_NO_TYPE,"ByPass",
|
||||
B_ENABLE);
|
||||
|
||||
BNullParameter *label;
|
||||
BParameterGroup *group;
|
||||
BContinuousParameter *value;
|
||||
BNullParameter* label;
|
||||
BParameterGroup* group;
|
||||
BContinuousParameter* value;
|
||||
|
||||
group = fParamGroup->MakeGroup("Pre Amp");
|
||||
label = group->MakeNullParameter(P_PREAMP_LABEL, B_MEDIA_NO_TYPE,
|
||||
"Pre Amp", B_GENERIC);
|
||||
value = group->MakeContinuousParameter(P_PREAMP, B_MEDIA_NO_TYPE,
|
||||
"", B_GAIN, "dB", -8.0, 8.0, 0.1);
|
||||
label = group->MakeNullParameter(P_PREAMP_LABEL, B_MEDIA_NO_TYPE, "Pre Amp",
|
||||
B_GENERIC);
|
||||
value = group->MakeContinuousParameter(P_PREAMP, B_MEDIA_NO_TYPE, "",
|
||||
B_GAIN, "dB", -8.0, 8.0, 0.1);
|
||||
label->AddOutput(value);
|
||||
value->AddInput(label);
|
||||
|
||||
for(int i=0; i<fEqualizer.BandCount(); i++) {
|
||||
for (int i = 0; i < fEqualizer.BandCount(); i++) {
|
||||
char freq[32];
|
||||
sprintf(freq,"%gHz",fEqualizer.BandFrequency(i));
|
||||
group = fParamGroup->MakeGroup(freq);
|
||||
label = group->MakeNullParameter(P_BAND_LABELS + i, B_MEDIA_NO_TYPE,
|
||||
freq, B_GENERIC);
|
||||
freq, B_GENERIC);
|
||||
value = group->MakeContinuousParameter(P_BANDS + i, B_MEDIA_NO_TYPE,
|
||||
"", B_GAIN, "dB", -16.0, 16.0, 0.1);
|
||||
"", B_GAIN, "dB", -16.0, 16.0, 0.1);
|
||||
label->AddOutput(value);
|
||||
value->AddInput(label);
|
||||
}
|
||||
@ -674,22 +695,26 @@ EqualizerNode::InitParameterWeb(void)
|
||||
SetParameterWeb(fWeb);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::InitFilter(void)
|
||||
{
|
||||
fEqualizer.SetFormat(fFormat.u.raw_audio.channel_count, fFormat.u.raw_audio.frame_rate);
|
||||
fEqualizer.SetFormat(fFormat.u.raw_audio.channel_count,
|
||||
fFormat.u.raw_audio.frame_rate);
|
||||
}
|
||||
|
||||
|
||||
bigtime_t
|
||||
EqualizerNode::GetFilterLatency(void)
|
||||
{
|
||||
if(fOutputMedia.destination == media_destination::null) {
|
||||
if (fOutputMedia.destination == media_destination::null)
|
||||
return 0LL;
|
||||
}
|
||||
|
||||
BBufferGroup *test_group = new BBufferGroup(fOutputMedia.format.u.raw_audio.buffer_size, 1);
|
||||
BBufferGroup* test_group =
|
||||
new BBufferGroup(fOutputMedia.format.u.raw_audio.buffer_size, 1);
|
||||
|
||||
BBuffer *buffer = test_group->RequestBuffer(fOutputMedia.format.u.raw_audio.buffer_size);
|
||||
BBuffer* buffer =
|
||||
test_group->RequestBuffer(fOutputMedia.format.u.raw_audio.buffer_size);
|
||||
buffer->Header()->type = B_MEDIA_RAW_AUDIO;
|
||||
buffer->Header()->size_used = fOutputMedia.format.u.raw_audio.buffer_size;
|
||||
|
||||
@ -705,17 +730,16 @@ EqualizerNode::GetFilterLatency(void)
|
||||
return latency;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
EqualizerNode::FilterBuffer(BBuffer* buffer)
|
||||
{
|
||||
uint32 m_frameSize = (fFormat.u.raw_audio.format & 0x0f) * fFormat.u.raw_audio.channel_count;
|
||||
uint32 m_frameSize = (fFormat.u.raw_audio.format & 0x0f)
|
||||
* fFormat.u.raw_audio.channel_count;
|
||||
uint32 samples = buffer->Header()->size_used / m_frameSize;
|
||||
uint32 channels = fFormat.u.raw_audio.channel_count;
|
||||
if(fMute !=0 ) {
|
||||
if (fMute != 0)
|
||||
memset(buffer->Data(), 0, buffer->Header()->size_used);
|
||||
} else {
|
||||
if(fByPass == 0) {
|
||||
fEqualizer.ProcessBuffer((float*)buffer->Data(), samples*channels);
|
||||
}
|
||||
}
|
||||
else if (fByPass == 0)
|
||||
fEqualizer.ProcessBuffer((float*)buffer->Data(), samples * channels);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user