{decoder,player}/Control: add ReplayGain{Config,Mode} attributes
Don't use the global variables in class DecoderBridge; instead, forward these values to the decoder thread via PlayerControl and DecoderControl.
This commit is contained in:
parent
77c1f54876
commit
ee57c3490a
@ -23,6 +23,7 @@
|
||||
#include "DetachedSong.hxx"
|
||||
#include "mixer/Volume.hxx"
|
||||
#include "IdleFlags.hxx"
|
||||
#include "ReplayGainGlobal.hxx"
|
||||
|
||||
Partition::Partition(Instance &_instance,
|
||||
unsigned max_length,
|
||||
@ -50,6 +51,8 @@ Partition::UpdateEffectiveReplayGainMode(ReplayGainMode mode)
|
||||
? ReplayGainMode::TRACK
|
||||
: ReplayGainMode::ALBUM;
|
||||
|
||||
pc.LockSetReplayGain(replay_gain_config, mode);
|
||||
|
||||
outputs.SetReplayGainMode(mode);
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,6 @@
|
||||
#include "pcm/PcmConvert.hxx"
|
||||
#include "tag/Tag.hxx"
|
||||
#include "AudioConfig.hxx"
|
||||
#include "ReplayGainGlobal.hxx"
|
||||
#include "Log.hxx"
|
||||
#include "input/InputStream.hxx"
|
||||
#include "util/ConstBuffer.hxx"
|
||||
@ -592,14 +591,14 @@ DecoderBridge::SubmitReplayGain(const ReplayGainInfo *new_replay_gain_info)
|
||||
if (++serial == 0)
|
||||
serial = 1;
|
||||
|
||||
if (ReplayGainMode::OFF != replay_gain_mode) {
|
||||
ReplayGainMode rgm = replay_gain_mode;
|
||||
if (ReplayGainMode::OFF != dc.replay_gain_mode) {
|
||||
ReplayGainMode rgm = dc.replay_gain_mode;
|
||||
if (rgm != ReplayGainMode::ALBUM)
|
||||
rgm = ReplayGainMode::TRACK;
|
||||
|
||||
const auto &tuple = new_replay_gain_info->Get(rgm);
|
||||
const auto scale =
|
||||
tuple.CalculateScale(replay_gain_config);
|
||||
tuple.CalculateScale(dc.replay_gain_config);
|
||||
dc.replay_gain_db = 20.0 * log10f(scale);
|
||||
}
|
||||
|
||||
|
@ -27,6 +27,8 @@
|
||||
#include "thread/Cond.hxx"
|
||||
#include "thread/Thread.hxx"
|
||||
#include "Chrono.hxx"
|
||||
#include "ReplayGainConfig.hxx"
|
||||
#include "ReplayGainMode.hxx"
|
||||
|
||||
#include <exception>
|
||||
|
||||
@ -156,6 +158,9 @@ struct DecoderControl {
|
||||
*/
|
||||
MusicPipe *pipe;
|
||||
|
||||
ReplayGainConfig replay_gain_config;
|
||||
ReplayGainMode replay_gain_mode = ReplayGainMode::OFF;
|
||||
|
||||
float replay_gain_db = 0;
|
||||
float replay_gain_prev_db = 0;
|
||||
|
||||
|
@ -26,6 +26,8 @@
|
||||
#include "thread/Thread.hxx"
|
||||
#include "CrossFade.hxx"
|
||||
#include "Chrono.hxx"
|
||||
#include "ReplayGainConfig.hxx"
|
||||
#include "ReplayGainMode.hxx"
|
||||
|
||||
#include <exception>
|
||||
|
||||
@ -167,6 +169,9 @@ struct PlayerControl {
|
||||
|
||||
CrossFadeSettings cross_fade;
|
||||
|
||||
ReplayGainConfig replay_gain_config;
|
||||
ReplayGainMode replay_gain_mode = ReplayGainMode::OFF;
|
||||
|
||||
double total_play_time;
|
||||
|
||||
/**
|
||||
@ -463,6 +468,13 @@ public:
|
||||
return cross_fade.mixramp_delay;
|
||||
}
|
||||
|
||||
void LockSetReplayGain(const ReplayGainConfig &_config,
|
||||
ReplayGainMode _mode) {
|
||||
const ScopeLock protect(mutex);
|
||||
replay_gain_config = _config;
|
||||
replay_gain_mode = _mode;
|
||||
}
|
||||
|
||||
double GetTotalPlayTime() const {
|
||||
return total_play_time;
|
||||
}
|
||||
|
@ -342,6 +342,13 @@ Player::StartDecoder(MusicPipe &_pipe)
|
||||
assert(queued || pc.command == PlayerCommand::SEEK);
|
||||
assert(pc.next_song != nullptr);
|
||||
|
||||
{
|
||||
/* copy ReplayGain parameters to the decoder */
|
||||
const ScopeLock protect(pc.mutex);
|
||||
dc.replay_gain_config = pc.replay_gain_config;
|
||||
dc.replay_gain_mode = pc.replay_gain_mode;
|
||||
}
|
||||
|
||||
SongTime start_time = pc.next_song->GetStartTime() + pc.seek_time;
|
||||
|
||||
dc.Start(new DetachedSong(*pc.next_song),
|
||||
|
Loading…
Reference in New Issue
Block a user