Linux: export and editor audio fail with EINVAL under comma-decimal locales (resampler-open)
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 78/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- rust
- Ambito
- audio-video-rtc
Direzione di ricerca
Start in crates/audio/src/streaming.rs at the resampler configuration using filter_size and cutoff. Reproduce the failure with a comma-decimal locale, then verify the numeric option handling against the bundled FFmpeg libraries. Done means Studio export and editor system-audio preview work under pt_BR.UTF-8 while continuing to work under LC_NUMERIC=C.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
On Linux with a locale that uses a comma as the decimal separator (pt_BR.UTF-8), every Studio recording fails to export:
Failed to export recording: Failed to load media: MultipleSegments 0 System Audio / resampler-open / Argumento inválido / next=0
("Argumento inválido" is the localized EINVAL.) Editor preview is also silent, and the log repeats:
WARN cap_editor::segments: Failed to load system audio track; continuing without it error=MultipleSegments 0 System Audio / resampler-open / Argumento inválido / next=0
I expected the export to succeed and the preview to play with system audio. The recorded system_audio.m4a is valid (AAC mono 48 kHz, plays fine in ffmpeg).
Root cause: crates/audio/src/streaming.rs configures the resampler with string options:
options.set("filter_size", "128");
options.set("cutoff", "0.97");
av_opt_set_dict parses "0.97" with strtod, which follows LC_NUMERIC. Under pt_BR the decimal separator is ,, so parsing fails and resampling::Context::get_with
returns EINVAL.
Suggested fix: set numeric options numerically (av_opt_set_double(ptr, "cutoff", 0.97, 0), av_opt_set_int(ptr, "filter_size", 128, 0)) before swr_init, or force
LC_NUMERIC=C at startup.
Workaround: launch Cap with LC_NUMERIC=C (e.g. Exec=env LC_NUMERIC=C Cap in a user .desktop override). Export and editor audio then work.
Reproduction
- On Linux, set
LANG=pt_BR.UTF-8/LC_NUMERIC=pt_BR.UTF-8(any comma-decimal locale). - Record a Studio recording with system audio.
- Open it in the editor and press play: no system audio.
- Export to MP4: the error above.
Minimal repro against Cap's bundled FFmpeg:
#include <locale.h>
#include <stdio.h>
#include <libavutil/channel_layout.h>
#include <libavutil/opt.h>
#include <libswresample/swresample.h>
int main(void) {
setlocale(LC_ALL, "");
AVChannelLayout mono = AV_CHANNEL_LAYOUT_MONO;
SwrContext *s = NULL;
swr_alloc_set_opts2(&s, &mono, AV_SAMPLE_FMT_FLT, 48000,
&mono, AV_SAMPLE_FMT_FLTP, 48000, 0, NULL);
printf("cutoff=%d\n", av_opt_set(s, "cutoff", "0.97", 0));
swr_free(&s);
}
$ cc repro.c -L/usr/lib/cap -l:libswresample.so.5 -l:libavutil.so.59 -Wl,-rpath,/usr/lib/cap
$ LC_ALL=pt_BR.UTF-8 ./a.out
[Eval] Invalid chars '.97' at the end of expression '0.97'
[SWR] Unable to parse option value "0.97"
cutoff=-22
$ LC_NUMERIC=C ./a.out
cutoff=0
Additional Context
- Cap version: 0.6.0 (
cap-binfrom the AUR) - Operating system, version: CachyOS (Arch Linux), kernel 7.2.3, Wayland / Hyprland
- Device (optional): AMD Ryzen 5 5600G, AMD Radeon RX 7600
Logs (~/.local/share/so.cap.desktop/logs/cap-desktop.log.2026-09-26):
2026-09-26T13:53:58.323416Z WARN cap_desktop_lib: System audio failed to load; returning empty waveform error=MultipleSegments 0 System Audio / resampler-open / Argumento
inválido / next=0
2026-09-26T13:54:05.551013Z WARN cap_editor::segments: Failed to load system audio track; continuing without it error=MultipleSegments 0 System Audio / resampler-open /
Argumento inválido / next=0
2026-09-26T14:04:31.970715Z WARN cap_desktop_lib: System audio failed to load; returning empty waveform error=MultipleSegments 0 System Audio / resampler-open / Argumento
inválido / next=0
2026-09-26T14:07:02.119598Z WARN cap_editor::segments: Failed to load system audio track; continuing without it error=MultipleSegments 0 System Audio / resampler-open /
Argumento inválido / next=0
Export diagnostic (cap-desktop.log.diagnostic-current.jsonl), 4 of 4 MP4 export attempts returned this:
{"time":"2026-09-26T14:14:11Z","app":"0.6.0","os":"linux","operation":"export_mp4","outcome":"returned_error","elapsedMs":4394,"fields":{"requested_fps":60,"requested_width":1
920,"requested_height":1080,"source_width":2560,"source_height":1440,"source_segments":1,"clips":1,"captions":false,"streaming_audio":false}}
- Lingua principale
- Rust
- Stelle
- 22.8k
- Fork
- 2k
- Merge medio
- 8h 10m
- PR unite (30g)
- 83
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di CapSoftware/Cap
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
CapSoftware/Cap#2305 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
CapSoftware/Cap#1714 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 64/100
CapSoftware/Cap#2360 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
CapSoftware/Cap#2357 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
CapSoftware/Cap#2340 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di CapSoftware/Cap
Issue simili
-
area:casework bug criticality:p3 triage:needs-implementation
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
registrystack/registry-stack#1623 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
leptos-rs/leptos#4885 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
longbridge/gpui-kit#3276 ·
I maintainer di solito rispondono entro 1 giorno
-
A-Migration Guides D-Straightforward S-Ready-For-Implementation X-Uncontroversial
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
bevyengine/bevy-website#2607 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno