Remove noisy graph-snapshot logs and add waveform-sync diagnostics

- Strip the dense RenderWorkerPool debug messages about cached/stale graph
  snapshots and cleanup to reduce log spam.
- Add qDebug logging and status-bar feedback to
  TimelineWidget::SynchronizeSelectedClipsByWaveform() so we can see why the
  sync action does nothing (e.g. not enough cached clips or no usable offset).
This commit is contained in:
2026-07-13 18:05:02 +08:00
parent 7cde0b0f1a
commit b4b52abbd4
2 changed files with 27 additions and 14 deletions
+27 -4
View File
@@ -1029,7 +1029,11 @@ void TimelineWidget::SynchronizeSelectedClipsByWaveform()
const QVector<WaveformSyncClip> sync_clips =
GetSelectedWaveformSyncClips(GetSelectedBlocks());
qDebug() << "TimelineWidget::SynchronizeSelectedClipsByWaveform:"
<< sync_clips.size() << "sync clip(s) selected";
if (sync_clips.size() < 2) {
Core::instance()->ShowStatusBarMessage(
tr("Select at least 2 clips with cached waveforms to sync by waveform"));
return;
}
@@ -1050,6 +1054,11 @@ void TimelineWidget::SynchronizeSelectedClipsByWaveform()
const QVector<double> reference_envelope =
ExtractWaveformCacheEnvelope(reference, sample_rate, window_samples);
qDebug() << "TimelineWidget::SynchronizeSelectedClipsByWaveform: sample_rate="
<< sample_rate << "window_samples=" << window_samples
<< "max_offset_windows=" << max_offset_windows
<< "reference_envelope_size=" << reference_envelope.size();
struct SyncPlacement {
ClipBlock *clip = nullptr;
rational timeline_in;
@@ -1066,9 +1075,14 @@ void TimelineWidget::SynchronizeSelectedClipsByWaveform()
sync_clip, sample_rate, window_samples);
const AudioWaveformSync::OffsetResult offset =
AudioWaveformSync::EstimateEnvelopeOffset(reference_envelope,
candidate_envelope,
window_samples,
max_offset_windows);
candidate_envelope,
window_samples,
max_offset_windows);
qDebug() << "TimelineWidget::SynchronizeSelectedClipsByWaveform: candidate"
<< sync_clip.clip << "envelope_size="
<< candidate_envelope.size() << "offset_valid="
<< offset.valid << "offset_samples=" << offset.offset_samples
<< "confidence=" << offset.confidence;
if (!offset.valid) {
continue;
}
@@ -1076,12 +1090,19 @@ void TimelineWidget::SynchronizeSelectedClipsByWaveform()
const AudioSynchronizer::Placement placement =
AudioSynchronizer::PlaceByWaveformOffset(
reference.clip->in(), offset.offset_samples, sample_rate);
qDebug() << "TimelineWidget::SynchronizeSelectedClipsByWaveform: placement"
<< "valid=" << placement.valid << "timeline_in="
<< placement.timeline_in.toDouble();
if (placement.valid && placement.timeline_in >= 0) {
placements.append({ sync_clip.clip, placement.timeline_in });
}
}
if (placements.size() < 2) {
qDebug() << "TimelineWidget::SynchronizeSelectedClipsByWaveform: no usable"
<< "offsets found";
Core::instance()->ShowStatusBarMessage(
tr("Could not find a usable waveform offset for the selected clips"));
return;
}
@@ -1107,7 +1128,9 @@ void TimelineWidget::SynchronizeSelectedClipsByWaveform()
new SetSelectionsCommand(this, new_selections, GetSelections()));
Core::instance()->undo_stack()->push(command,
tr("Synchronize Clips by Waveform"));
tr("Synchronize Clips by Waveform"));
Core::instance()->ShowStatusBarMessage(
tr("Synchronized %1 clip(s) by waveform").arg(placements.size()));
}
void TimelineWidget::GenerateProxiesForSelectedClips()