| 2542 | } |
| 2543 | |
| 2544 | void |
| 2545 | DefaultScheduler::aboutToStartRender() |
| 2546 | { |
| 2547 | OutputSchedulerThreadStartArgsPtr args = getCurrentRunArgs(); |
| 2548 | OutputEffectInstancePtr effect = _effect.lock(); |
| 2549 | |
| 2550 | { |
| 2551 | QMutexLocker k(&_currentTimeMutex); |
| 2552 | if (args->pushTimelineDirection == eRenderDirectionForward) { |
| 2553 | _currentTime = args->firstFrame; |
| 2554 | } else { |
| 2555 | _currentTime = args->lastFrame; |
| 2556 | } |
| 2557 | } |
| 2558 | bool isBackGround = appPTR->isBackground(); |
| 2559 | |
| 2560 | if (!isBackGround) { |
| 2561 | effect->setKnobsFrozen(true); |
| 2562 | } else { |
| 2563 | QString longText = QString::fromUtf8( effect->getScriptName_mt_safe().c_str() ) + tr(" ==> Rendering started"); |
| 2564 | appPTR->writeToOutputPipe(longText, QString::fromUtf8(kRenderingStartedShort), true); |
| 2565 | } |
| 2566 | |
| 2567 | // Activate the internal writer node for a write node |
| 2568 | WriteNode* isWriter = dynamic_cast<WriteNode*>( effect.get() ); |
| 2569 | if (isWriter) { |
| 2570 | isWriter->onSequenceRenderStarted(); |
| 2571 | } |
| 2572 | |
| 2573 | std::string cb = effect->getNode()->getBeforeRenderCallback(); |
| 2574 | if ( !cb.empty() ) { |
| 2575 | std::vector<std::string> args; |
| 2576 | std::string error; |
| 2577 | try { |
| 2578 | NATRON_PYTHON_NAMESPACE::getFunctionArguments(cb, &error, &args); |
| 2579 | } catch (const std::exception& e) { |
| 2580 | effect->getApp()->appendToScriptEditor( std::string("Failed to get signature of beforeRender callback: ") |
| 2581 | + e.what() ); |
| 2582 | |
| 2583 | return; |
| 2584 | } |
| 2585 | |
| 2586 | if ( !error.empty() ) { |
| 2587 | effect->getApp()->appendToScriptEditor("Failed to get signature of beforeRender callback: " + error); |
| 2588 | |
| 2589 | return; |
| 2590 | } |
| 2591 | |
| 2592 | std::string signatureError; |
| 2593 | signatureError.append("The beforeRender callback supports the following signature(s):\n"); |
| 2594 | signatureError.append("- callback(thisNode, app)"); |
| 2595 | if ( (args.size() != 2) || (args[0] != "thisNode") || (args[1] != "app") ) { |
| 2596 | effect->getApp()->appendToScriptEditor("Failed to run beforeRender callback: " + signatureError); |
| 2597 | |
| 2598 | return; |
| 2599 | } |
| 2600 | |
| 2601 |
nothing calls this directly
no test coverage detected