@@ -419,46 +419,27 @@ void DspHost::updateGraphicEq(DspConfig *config)
419419
420420void DspHost::updateCrossfeed (DspConfig* config)
421421{
422- bool modeExists;
423- bool enableExists;
424- int mode = config->get <int >(DspConfig::crossfeed_mode, &modeExists);
425- int enabled = config->get <bool >(DspConfig::crossfeed_enable, &enableExists);
426-
427- if (!modeExists)
428- {
429- util::warning (" Crossfeed mode unset, using defaults" );
430- }
431-
432- if (!enableExists)
433- {
434- util::warning (" Crossfeed enable switch unset, disabling crossfeed." );
435- enabled = false ;
436- }
422+ int mode = config->get <int >(DspConfig::crossfeed_mode);
437423
438- if (mode == 99 )
424+ // Workaround: CrossfeedChangeMode for mode 0 (weak) leads to audio loss. so let's just do it directly like BS2B custom above
425+ if (mode == 99 /* custom */ || mode == 0 /* weak */ )
439426 {
440- bool fcutExists;
441- bool feedExists;
442- int fcut = config->get <int >(DspConfig::crossfeed_bs2b_fcut, &fcutExists);
443- int feed = config->get <int >(DspConfig::crossfeed_bs2b_feed, &feedExists);
427+ int fcut = config->get <int >(DspConfig::crossfeed_bs2b_fcut);
428+ int feed = config->get <int >(DspConfig::crossfeed_bs2b_feed);
444429
445- if (!fcutExists)
430+ // Workaround, see comment above
431+ if (mode == 0 )
446432 {
447- util::warning (" Crossfeed custom fcut unset, using defaults" );
448- fcut = 650 ;
449- }
450- if (!feedExists)
451- {
452- util::warning (" Crossfeed custom feed unset, using defaults" );
453- feed = 95 ;
433+ fcut = 700 ;
434+ feed = 65 ;
454435 }
455436
456437 memset (&cast (this ->_dsp )->advXF .bs2b , 0 , sizeof (cast (this ->_dsp )->advXF .bs2b ));
457438 BS2BInit (&cast (this ->_dsp )->advXF .bs2b [1 ], (unsigned int )cast (this ->_dsp )->fs , ((unsigned int )fcut | ((unsigned int )feed << 16 )));
458439 cast (this ->_dsp )->advXF .mode = 1 ;
459440 }
460441 else
461- {
442+ {
462443 CrossfeedChangeMode (cast (this ->_dsp ), mode);
463444 }
464445}
0 commit comments