Bug 61157
| Summary: | запись сикрофона kdenlive вырезает фрагменты из записанного аудио (битое аудио) | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Product: | Branch p11 | Reporter: | Sivel (Николай) <nikolai0302> | ||||||
| Component: | qt6-multimedia | Assignee: | Sergey V Turchin <zerg> | ||||||
| Status: | RESOLVED FIXED | QA Contact: | qa-p11 <qa-p11> | ||||||
| Severity: | normal | ||||||||
| Priority: | P5 | CC: | nikolai0302, sychkinsv | ||||||
| Version: | unspecified | ||||||||
| Hardware: | x86_64 | ||||||||
| OS: | Linux | ||||||||
| Attachments: |
|
||||||||
к сожаление вложение весит 8 мб, не влезло в багзиллу, поэтому отправляю ссылку на видео в облаке https://disk.yandex.ru/d/qBmNGiBikSBRSA Здравствуйте Спасибо за подробное описание. Стенд (p11): ALT K Workstation 11.4 x86-64 Пакеты: libqt6-multimedia 6.11.2 kdenlive-26.04.3-alt1.x86_64 pipewire-1.4.7-alt1.x86_64 wireplumber-0.5.13-alt1.x86_64 Дополнительная диагностика: 1. Audacity работает корректно с тем же микрофоном. Это доказывает, что проблема не в оборудовании и не в PipeWire. 2. Причина: в функции RecordingEngine::stopAndDeleteThreads() (qffmpegrecordingengine.cpp:296) энкодеры и муксер уничтожаются через clear()/reset() без вызова cleanup(). Очереди m_audioBufferQueue и m_packetQueue теряются, av_write_trailer() закрывает файл без последних данных. 3. Логи Qt подтверждают конвертацию: микрофон отдаёт s32, kdenlive просит s16, создаётся ресемплер [ s32 ] -> [ s16 ]. Это вызывает джиттер планировщика PipeWire (WAIT 100+ мкс) и переполнение очереди. Этот баг upstream: https://bugs.kde.org/show_bug.cgi?id=510457. Проблема воспроизводится на версиях Qt (6.9.2, 6.11.2), что подтверждает: это не специфика ALT Linux, а upstream-баг Qt Multimedia. Проверка на Sisyphus: ошибка не воспроизводится. В Sisyphus стоят pipewire-1.6.11 и wireplumber-0.5.14. В логах Qt: Resampler is not needed due to no-conversion format [ s16 ]. Новый PipeWire отдаёт s16 напрямую, ресемплер не нужен. Created attachment 22857 [details]
стек потока во время записи
Во время записи в стеке присутствуют потоки AudioEncoder и Muxer (TID 373318–373324), которые находятся в QWaitCondition::wait и удерживают блокировки (стек содержит вызовы из libQt6Multimedia.so).
Created attachment 22858 [details]
стек после нажатия "стоп"
После нажатия «Стоп» эти же потоки потеряли вызовы из libQt6Multimedia.so — объекты, к которым они обращались, уничтожены функцией RecordingEngine::stopAndDeleteThreads() (вызовы clear()/reset() без cleanup()). Потоки акстивировались, но данные уже потеряны.
|

Description
Sivel (Николай) 2026-10-21 11:31:25 MSK