Fix Linux audio backend preference and worker footage render crash

- On Linux, automatically prefer PipeWire/JACK/PulseAudio over ALSA
  even when a saved ALSA device name exists in config.
- Restore Footage length after deserialization so worker snapshots
  have valid stream lengths and video playback can advance.
- Guard ResolveDecoderFromInput and ProcessAudioFootage against a
  null decoder cache to prevent worker crashes on direct Footage ->
  ViewerOutput connections.
- Keep Linux signal backtrace handler in the render worker.
- Add Oak project SVG logos.
This commit is contained in:
2026-07-14 22:33:30 +08:00
parent 5c8ce17c7e
commit 3be4294e15
6 changed files with 101 additions and 3 deletions
+12
View File
@@ -317,6 +317,12 @@ RenderProcessor::ResolveDecoderFromInput(const QString &decoder_id,
return nullptr;
}
if (!decoder_cache_) {
qWarning() << "Cannot resolve decoder for" << stream.filename()
<< "without a decoder cache";
return nullptr;
}
QMutexLocker locker(decoder_cache_->mutex());
DecoderPair decoder = decoder_cache_->value(stream);
@@ -599,6 +605,12 @@ void RenderProcessor::ProcessAudioFootage(SampleBuffer &destination,
const FootageJob *stream,
const TimeRange &input_time)
{
// The worker process has no decoder cache and does not decode audio. Bail
// out gracefully rather than letting ResolveDecoderFromInput crash.
if (!decoder_cache_) {
return;
}
DecoderPtr decoder = ResolveDecoderFromInput(
stream->decoder(),
Decoder::CodecStream(stream->filename(),