mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 18:43:51 +00:00
fix(display): хирургическая смена rate главного — паны не замирают
ChangeSampleRate больше не делает полный Close/Open движка (стоп DSP-потока, разрушение всех анализаторов, сброс общей IQ-очереди): гейт FMainGated+FMainLock дропает только main-пакеты, пересоздаются только RXA_CHAN и слайсы пана 0, анализаторы панов живут. Контроллер не сбрасывает FWDSPReady на время смены (OnDDCIQ продолжает кормить паны). Общий код RXA — Open/CloseMainRXChannel. Бонус: SetChannelState dmode=1 на idle-каналах зря ждал флаш ~130мс → dmode=0 в CloseSliceChannel/CloseMainRXChannel (каналы всегда idle по локам). Итог: смена 331→120мс, пауза аудио пан-слайса 137→40мс. Смоук ratetest ALL PASS, подтверждено на экране. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+8
-5
@@ -3167,14 +3167,17 @@ begin
|
||||
FSpanHz := Hz;
|
||||
FBandCache[FCurrentBand].SpanHz := FSpanHz; // для обратной совместимости
|
||||
|
||||
// 1. Останавливаем WDSP и меняем rate (Close + FlushQueue + Open).
|
||||
// 1. Меняем rate главного тракта. Хирургически: движок гейтит и дропает
|
||||
// только main-пакеты, DSP-поток/анализаторы/паны N живут без пауз —
|
||||
// поэтому FWDSPReady НЕ сбрасываем (иначе OnDDCIQ перестал бы кормить
|
||||
// паны на всё время пересборки и их водопады замирали).
|
||||
if FWDSPReady and Assigned(FDSPEngine) then
|
||||
begin
|
||||
FWDSPReady := False;
|
||||
FDSPEngine.ChangeSampleRate(Hz);
|
||||
end;
|
||||
|
||||
// 2. Новый rate трансиверу (после остановки DSP — пакеты сразу с верным rate).
|
||||
// 2. Новый rate трансиверу. Короткий хвост пакетов старого rate, дошедших
|
||||
// до переключения радио, попадает в новый канал — транзиент в единицы мс
|
||||
// (то же окно было и при старой схеме: FWDSPReady поднимался до того, как
|
||||
// радио реально применяло DDC Specific).
|
||||
if Assigned(FNetwork) and FNetwork.Connected then
|
||||
FNetwork.ConfigureDDCs(1, Hz div 1000, FMainADCSrc,
|
||||
FDitherEnabled, FRandomEnabled);
|
||||
|
||||
Reference in New Issue
Block a user