mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-19 17:49:14 +00:00
UI: Implement source mixer modification signals
Implement the signals for the mixer checkboxes in the advanced audio control so that it properly relays the values to/from the source when the mixers are changed in obs or when the mixers are changed by the user.
This commit is contained in:
parent
73d538102b
commit
93ec22ff54
|
@ -22,6 +22,7 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(obs_source_t *source_)
|
|||
const char *sourceName = obs_source_get_name(source);
|
||||
float vol = obs_source_get_volume(source);
|
||||
uint32_t flags = obs_source_get_flags(source);
|
||||
uint32_t mixers = obs_source_get_audio_mixers(source);
|
||||
|
||||
forceMonoContainer = new QWidget();
|
||||
mixerContainer = new QWidget();
|
||||
|
@ -44,6 +45,8 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(obs_source_t *source_)
|
|||
this);
|
||||
flagsSignal.Connect(handler, "update_flags", OBSSourceFlagsChanged,
|
||||
this);
|
||||
mixersSignal.Connect(handler, "audio_mixers", OBSSourceMixersChanged,
|
||||
this);
|
||||
|
||||
hlayout = new QHBoxLayout();
|
||||
hlayout->setContentsMargins(0, 0, 0, 0);
|
||||
|
@ -90,15 +93,14 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(obs_source_t *source_)
|
|||
syncOffset->setMaximumWidth(130);
|
||||
syncOffset->setValue(int(cur_sync / NSEC_PER_MSEC));
|
||||
|
||||
mixer1->setChecked(true);
|
||||
mixer1->setText("1");
|
||||
mixer1->setEnabled(false);
|
||||
mixer1->setChecked(mixers & (1<<0));
|
||||
mixer2->setText("2");
|
||||
mixer2->setEnabled(false);
|
||||
mixer2->setChecked(mixers & (1<<1));
|
||||
mixer3->setText("3");
|
||||
mixer3->setEnabled(false);
|
||||
mixer3->setChecked(mixers & (1<<2));
|
||||
mixer4->setText("4");
|
||||
mixer4->setEnabled(false);
|
||||
mixer4->setChecked(mixers & (1<<3));
|
||||
|
||||
panningContainer->setMinimumWidth(140);
|
||||
panningContainer->setMaximumWidth(140);
|
||||
|
@ -167,6 +169,13 @@ void OBSAdvAudioCtrl::OBSSourceSyncChanged(void *param, calldata_t *calldata)
|
|||
"SourceSyncChanged", Q_ARG(int64_t, offset));
|
||||
}
|
||||
|
||||
void OBSAdvAudioCtrl::OBSSourceMixersChanged(void *param, calldata_t *calldata)
|
||||
{
|
||||
uint32_t mixers = (uint32_t)calldata_int(calldata, "mixers");
|
||||
QMetaObject::invokeMethod(reinterpret_cast<OBSAdvAudioCtrl*>(param),
|
||||
"SourceMixersChanged", Q_ARG(uint32_t, mixers));
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Qt event queue source callbacks */
|
||||
|
||||
|
@ -195,6 +204,14 @@ void OBSAdvAudioCtrl::SourceSyncChanged(int64_t offset)
|
|||
syncOffset->setValue(offset / NSEC_PER_MSEC);
|
||||
}
|
||||
|
||||
void OBSAdvAudioCtrl::SourceMixersChanged(uint32_t mixers)
|
||||
{
|
||||
setCheckboxState(mixer1, mixers & (1<<0));
|
||||
setCheckboxState(mixer2, mixers & (1<<1));
|
||||
setCheckboxState(mixer3, mixers & (1<<2));
|
||||
setCheckboxState(mixer4, mixers & (1<<3));
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Qt control callbacks */
|
||||
|
||||
|
@ -235,26 +252,34 @@ void OBSAdvAudioCtrl::syncOffsetChanged(int milliseconds)
|
|||
int64_t(milliseconds) * NSEC_PER_MSEC);
|
||||
}
|
||||
|
||||
static inline void setMixer(obs_source_t *source, const int mixerIdx,
|
||||
const bool checked)
|
||||
{
|
||||
uint32_t mixers = obs_source_get_audio_mixers(source);
|
||||
uint32_t new_mixers = mixers;
|
||||
|
||||
if (checked) new_mixers |= (1<<mixerIdx);
|
||||
else new_mixers &= ~(1<<mixerIdx);
|
||||
|
||||
obs_source_set_audio_mixers(source, new_mixers);
|
||||
}
|
||||
|
||||
void OBSAdvAudioCtrl::mixer1Changed(bool checked)
|
||||
{
|
||||
/* TODO */
|
||||
UNUSED_PARAMETER(checked);
|
||||
setMixer(source, 0, checked);
|
||||
}
|
||||
|
||||
void OBSAdvAudioCtrl::mixer2Changed(bool checked)
|
||||
{
|
||||
/* TODO */
|
||||
UNUSED_PARAMETER(checked);
|
||||
setMixer(source, 1, checked);
|
||||
}
|
||||
|
||||
void OBSAdvAudioCtrl::mixer3Changed(bool checked)
|
||||
{
|
||||
/* TODO */
|
||||
UNUSED_PARAMETER(checked);
|
||||
setMixer(source, 2, checked);
|
||||
}
|
||||
|
||||
void OBSAdvAudioCtrl::mixer4Changed(bool checked)
|
||||
{
|
||||
/* TODO */
|
||||
UNUSED_PARAMETER(checked);
|
||||
setMixer(source, 3, checked);
|
||||
}
|
||||
|
|
|
@ -26,10 +26,12 @@ private:
|
|||
OBSSignal volChangedSignal;
|
||||
OBSSignal syncOffsetSignal;
|
||||
OBSSignal flagsSignal;
|
||||
OBSSignal mixersSignal;
|
||||
|
||||
static void OBSSourceFlagsChanged(void *param, calldata_t *calldata);
|
||||
static void OBSSourceVolumeChanged(void *param, calldata_t *calldata);
|
||||
static void OBSSourceSyncChanged(void *param, calldata_t *calldata);
|
||||
static void OBSSourceMixersChanged(void *param, calldata_t *calldata);
|
||||
|
||||
public:
|
||||
OBSAdvAudioCtrl(obs_source_t *source_);
|
||||
|
@ -40,6 +42,7 @@ public slots:
|
|||
void SourceFlagsChanged(uint32_t flags);
|
||||
void SourceVolumeChanged(float volume);
|
||||
void SourceSyncChanged(int64_t offset);
|
||||
void SourceMixersChanged(uint32_t mixers);
|
||||
|
||||
void volumeChanged(int percentage);
|
||||
void downmixMonoChanged(bool checked);
|
||||
|
|
Loading…
Reference in a new issue