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

Method processFrame

Engine/OutputSchedulerThread.cpp:2406–2487  ·  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

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