AD1848: Extend ad1848_filter_aux2 to any channel
This commit is contained in:
@@ -97,7 +97,7 @@ extern void ad1848_update(ad1848_t *ad1848);
|
|||||||
extern void ad1848_speed_changed(ad1848_t *ad1848);
|
extern void ad1848_speed_changed(ad1848_t *ad1848);
|
||||||
extern void ad1848_set_cd_audio_channel(void *priv, int channel);
|
extern void ad1848_set_cd_audio_channel(void *priv, int channel);
|
||||||
extern void ad1848_filter_cd_audio(int channel, double *buffer, void *priv);
|
extern void ad1848_filter_cd_audio(int channel, double *buffer, void *priv);
|
||||||
extern void ad1848_filter_aux2(void* priv, double* out_l, double* out_r);
|
extern void ad1848_filter_channel(void* priv, int channel, double* out_l, double* out_r);
|
||||||
|
|
||||||
extern void ad1848_init(ad1848_t *ad1848, uint8_t type);
|
extern void ad1848_init(ad1848_t *ad1848, uint8_t type);
|
||||||
|
|
||||||
|
|||||||
@@ -770,20 +770,24 @@ ad1848_filter_cd_audio(int channel, double *buffer, void *priv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ad1848_filter_aux2(void *priv, double *out_l, double *out_r)
|
ad1848_filter_channel(void *priv, int channel, double *out_l, double *out_r)
|
||||||
{
|
{
|
||||||
const ad1848_t *ad1848 = (ad1848_t *) priv;
|
const ad1848_t *ad1848 = (ad1848_t *) priv;
|
||||||
|
|
||||||
if (ad1848->regs[4] & 0x80) {
|
const int max_channel = (ad1848->type >= AD1848_TYPE_CS4231) ? 31 : 15;
|
||||||
|
if (channel > max_channel)
|
||||||
|
channel = max_channel;
|
||||||
|
|
||||||
|
if (ad1848->regs[channel] & 0x80) {
|
||||||
*out_l = 0.0;
|
*out_l = 0.0;
|
||||||
} else {
|
} else {
|
||||||
*out_l = ((*out_l) * ad1848_vols_5bits_aux_gain[ad1848->regs[4] & 0x1f]) / 65536.0;
|
*out_l = ((*out_l) * ad1848_vols_5bits_aux_gain[ad1848->regs[channel] & 0x1f]) / 65536.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ad1848->regs[5] & 0x80) {
|
if (ad1848->regs[channel + 1] & 0x80) {
|
||||||
*out_r = 0.0;
|
*out_r = 0.0;
|
||||||
} else {
|
} else {
|
||||||
*out_r = ((*out_r) * ad1848_vols_5bits_aux_gain[ad1848->regs[5] & 0x1f]) / 65536.0;
|
*out_r = ((*out_r) * ad1848_vols_5bits_aux_gain[ad1848->regs[channel + 1] & 0x1f]) / 65536.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ optimc_filter_opl(void *priv, double *out_l, double *out_r)
|
|||||||
if (optimc->cur_wss_enabled) {
|
if (optimc->cur_wss_enabled) {
|
||||||
*out_l /= optimc->sb->mixer_sbpro.fm_l;
|
*out_l /= optimc->sb->mixer_sbpro.fm_l;
|
||||||
*out_r /= optimc->sb->mixer_sbpro.fm_r;
|
*out_r /= optimc->sb->mixer_sbpro.fm_r;
|
||||||
ad1848_filter_aux2((void *) &optimc->ad1848, out_l, out_r);
|
ad1848_filter_channel((void *) &optimc->ad1848, AD1848_AUX2, out_l, out_r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user