Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Linux: export and editor audio fail with EINVAL under comma-decimal locales (resampler-open)

Aperta
#2,359 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

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

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

bug
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

Image

("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
  1. On Linux, set LANG=pt_BR.UTF-8 / LC_NUMERIC=pt_BR.UTF-8 (any comma-decimal locale).
  2. Record a Studio recording with system audio.
  3. Open it in the editor and press play: no system audio.
  4. 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-bin from 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

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di CapSoftware/Cap

Tutte le issue di CapSoftware/Cap

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.