Linux: export and editor audio fail with EINVAL under comma-decimal locales (resampler-open)
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 78/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- rust
- Domaine
- audio-video-rtc
Piste de recherche
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.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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}}
- Langage dominant
- Rust
- Étoiles
- 22.8k
- Forks
- 2k
- Merge moyen
- 12 h 41 min
- PR mergées (30 j)
- 84
Préparer son environnement
- Fournit un Dockerfile ou un fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de CapSoftware/Cap
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
CapSoftware/Cap#2305 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
CapSoftware/Cap#1714 · 3 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 3/5 1-2 jours Accessibilité débutants 64/100
CapSoftware/Cap#2360 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
[Feature Request] Editor media library + audio processing (speed & pitch for audio segments)Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
CapSoftware/Cap#2357 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
CapSoftware/Cap#2340 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de CapSoftware/Cap
Issues similaires
-
backend::vllm diffusion multimodal
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
lambdaclass/ethrex#7329 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
shadowsocks/shadowsocks-rust#2186 · 1 commentaire ·
-
[Chore]: Inconsistent wasm-pack binary invocation in justfile breaks cross-platform executionOuverteC-bug S-awaiting-triage
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
juspay/hyperswitch#14479 ·
Les mainteneurs répondent en général sous 1 jour