mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
draw optimization
This commit is contained in:
+19
-6
@@ -359,10 +359,14 @@ begin
|
||||
// ---- Шаг 1: создать анализатор ----
|
||||
// success = 0 означает УСПЕХ (WDSP Guide p.119)
|
||||
// m_size = максимальный FFT размер (должен быть степенью 2, ≤ 262144)
|
||||
// ОПТИМИЗАЦИЯ: 262144 → 16384. WDSP аллоцирует и инициализирует twiddle-таблицы
|
||||
// для ВСЕХ степеней 2 вплоть до m_size при каждом вызове XCreateAnalyzer.
|
||||
// Реальный рабочий FFT = 4096, запас ×4 = 16384 достаточен для будущих апгрейдов.
|
||||
// Эффект: время открытия WDSP ~10 сек → ~1 сек.
|
||||
// m_LO = 1 (нет spur elimination)
|
||||
// m_stitch = 1 (один sub-span)
|
||||
Success := -1;
|
||||
XCreateAnalyzer(DISP_ID, @Success, 262144, 1, 1, nil);
|
||||
XCreateAnalyzer(DISP_ID, @Success, 16384, 1, 1, nil);
|
||||
if Success <> 0 then
|
||||
begin
|
||||
// Анализатор не создан — работаем без спектра, краша не будет
|
||||
@@ -443,7 +447,18 @@ begin
|
||||
end;
|
||||
|
||||
try
|
||||
// ОПТИМИЗАЦИЯ: Анализатор создаём ПЕРВЫМ — до OpenChannel.
|
||||
// Это соответствует порядку piHPSDR и гарантирует что DISP_ID готов
|
||||
// до того как DSP поток начнёт вызывать Spectrum0.
|
||||
OpenAnalyzer;
|
||||
// НЕ используем SetRXASpectrum — кормим анализатор вручную
|
||||
// через Spectrum0 с Double буфером, чтобы избежать SIGSEGV
|
||||
// (fexchange0 работает с Single, а внутри WDSP Spectrum2 ждёт Double)
|
||||
|
||||
// ---- RXA channel 0 ----
|
||||
// ОПТИМИЗАЦИЯ: state=0 (не запускать сразу) — настраиваем все параметры
|
||||
// вхолостую, только потом стартуем через SetChannelState.
|
||||
// Канал не тратит CPU на обработку "мусорных" данных в процессе настройки.
|
||||
OpenChannel(
|
||||
RXA_CHAN,
|
||||
FBufSize, // in_size @ FSampleRate (4096 @ 192kHz)
|
||||
@@ -452,7 +467,7 @@ begin
|
||||
FAudioRate, // dsp_rate = 48kHz
|
||||
FAudioRate, // out_rate = 48kHz
|
||||
0, // atype: 0=RX
|
||||
1, // state: 1=run
|
||||
0, // state: 0=hold (запустим после настройки всех параметров)
|
||||
0.010, 0.010, 0.010, 0.010,
|
||||
0
|
||||
);
|
||||
@@ -466,10 +481,8 @@ begin
|
||||
SetRXAPanelSelect(RXA_CHAN, 3);
|
||||
SetRXAPanelRun(RXA_CHAN, 1);
|
||||
|
||||
OpenAnalyzer;
|
||||
// НЕ используем SetRXASpectrum — кормим анализатор вручную
|
||||
// через Spectrum0 с Double буфером, чтобы избежать SIGSEGV
|
||||
// (fexchange0 работает с Single, а внутри WDSP Spectrum2 ждёт Double)
|
||||
// Запускаем RXA канал только после полной настройки
|
||||
SetChannelState(RXA_CHAN, 1, 0); // run, no delay-wait
|
||||
|
||||
// ---- TXA channel 1 ----
|
||||
OpenChannel(
|
||||
|
||||
Reference in New Issue
Block a user