MCPcopy Create free account
hub / github.com/NatronGitHub/Natron / processFrame

Method processFrame

Engine/OutputSchedulerThread.cpp:2404–2485  ·  view source on GitHub ↗

* @brief Called whenever there are images available to process in the buffer. * Once processed, the frame will be removed from the buffer. * * According to the ProcessFrameModeEnum given to the scheduler this function will be called either by the scheduler thread (this) * or by the application's main-thread (typically to do OpenGL rendering). **/

Source from the content-addressed store, hash-verified

2402 * or by the application's main-thread (typically to do OpenGL rendering).
2403 **/
2404void
2405DefaultScheduler::processFrame(const BufferedFrames& frames)
2406{
2407 assert( !frames.empty() );
2408 //Only consider the first frame, we shouldn't have multiple view here anyway.
2409 const BufferedFrame& frame = frames.front();
2410
2411 ///Writers render to scale 1 always
2412 RenderScale scale(1.);
2413 OutputEffectInstancePtr effect = _effect.lock();
2414 U64 hash = effect->getHash();
2415 bool isProjectFormat;
2416 RectD rod;
2417 RectI roi;
2418 std::list<ImagePlaneDesc> components;
2419
2420 {
2421 ImagePlaneDesc metadataPlane, metadataPairedPlane;
2422 effect->getMetadataComponents(-1, &metadataPlane, &metadataPairedPlane);
2423 if (metadataPlane.getNumComponents() > 0) {
2424 components.push_back(metadataPlane);
2425 }
2426 }
2427
2428 ImageBitDepthEnum imageDepth = effect->getBitDepth(-1);
2429 const double par = effect->getAspectRatio(-1);
2430 const bool isRenderDueToRenderInteraction = false;
2431 const bool isSequentialRender = true;
2432
2433 for (BufferedFrames::const_iterator it = frames.begin(); it != frames.end(); ++it) {
2434 AbortableRenderInfoPtr abortInfo = AbortableRenderInfo::create(true, 0);
2435
2436 setAbortInfo(isRenderDueToRenderInteraction, abortInfo, effect);
2437
2438 ParallelRenderArgsSetter frameRenderArgs(it->time,
2439 it->view,
2440 isRenderDueToRenderInteraction, // is this render due to user interaction ?
2441 isSequentialRender, // is this sequential ?
2442 abortInfo, //abortInfo
2443 effect->getNode(), //tree root
2444 0, //texture index
2445 effect->getApp()->getTimeLine().get(),
2446 NodePtr(),
2447 false,
2448 false,
2449 it->stats);
2450
2451 ignore_result( effect->getRegionOfDefinition_public(hash, it->time, scale, it->view, &rod, &isProjectFormat) );
2452 rod.toPixelEnclosing(0, par, &roi);
2453
2454
2455 RenderingFlagSetter flagIsRendering( effect->getNode() );
2456 ImagePtr inputImage = std::dynamic_pointer_cast<Image>(it->frame);
2457 assert(inputImage);
2458
2459 EffectInstance::InputImagesMap inputImages;
2460 inputImages[0].push_back(inputImage);
2461 std::unique_ptr<EffectInstance::RenderRoIArgs> renderArgs( new EffectInstance::RenderRoIArgs(frame.time,

Callers

nothing calls this directly

Calls 15

ignore_resultFunction · 0.85
emptyMethod · 0.80
getMetadataComponentsMethod · 0.80
toPixelEnclosingMethod · 0.80
renderRoIMethod · 0.80
aboutToUpdateTexturesMethod · 0.80
updateViewerMethod · 0.80
redrawViewerNowMethod · 0.80
redrawViewerMethod · 0.80
lockMethod · 0.45
getHashMethod · 0.45

Tested by

no test coverage detected