engine: timeline edit primitives and oak-cli transcode
- oakengine_sequence_add_track and add_footage_clip are the facade's first editing primitives: undoable track creation and clip placement with full range validation, clip enumeration, and gap filtering - oak-cli transcode closes the loop: media file -> import -> clip -> render, producing scaled PPM frames and a WAV from just the C ABI - engine fix uncovered by transcode: the render worker used an invalid empty AudioParams for IPC render frames, crashing any sequence that contains audio; it now derives them from the rendered node itself - sequence_new hardens its defaults against missing audio config keys
This commit is contained in:
+12
-2
@@ -504,8 +504,18 @@ private:
|
||||
QVariant::fromValue(color_output));
|
||||
}
|
||||
ticket->setProperty("vparam", QVariant::fromValue(vparams));
|
||||
ticket->setProperty("aparam",
|
||||
QVariant::fromValue(olive::AudioParams()));
|
||||
// The IPC render_frame message carries no audio parameters, but
|
||||
// rendering a sequence that has audio content evaluates audio
|
||||
// tracks with globals.aparams -- an empty AudioParams aborts
|
||||
// (AudioParams::time_to_samples asserts is_valid). Use the render
|
||||
// node's own audio parameters, mirroring the in-process render
|
||||
// path (PreviewAutoCacher uses context->get_audio_params()).
|
||||
olive::AudioParams aparam;
|
||||
if (olive::ViewerOutput *viewer =
|
||||
dynamic_cast<olive::ViewerOutput *>(node)) {
|
||||
aparam = viewer->get_audio_params();
|
||||
}
|
||||
ticket->setProperty("aparam", QVariant::fromValue(aparam));
|
||||
ticket->setProperty("return", olive::RenderManager::k_frame);
|
||||
ticket->setProperty("cache", QString());
|
||||
ticket->setProperty("cachetimebase",
|
||||
|
||||
Reference in New Issue
Block a user