コード例 #1
0
void ViewLevelsNode::convertToOperations(NodeConverter &converter, const CompositorContext &/*context*/) const
{
	NodeInput *input = this->getInputSocket(0);
	if (input->isLinked()) {
		// add preview to inputSocket;

		/* calculate mean operation */
		{
			CalculateMeanOperation *operation = new CalculateMeanOperation();
			operation->setSetting(this->getbNode()->custom1);

			converter.addOperation(operation);
			converter.mapInputSocket(input, operation->getInputSocket(0));
			converter.mapOutputSocket(this->getOutputSocket(0), operation->getOutputSocket());
		}

		/* calculate standard deviation operation */
		{
			CalculateStandardDeviationOperation *operation = new CalculateStandardDeviationOperation();
			operation->setSetting(this->getbNode()->custom1);

			converter.addOperation(operation);
			converter.mapInputSocket(input, operation->getInputSocket(0));
			converter.mapOutputSocket(this->getOutputSocket(1), operation->getOutputSocket());
		}
	}
	else {
		converter.addOutputValue(getOutputSocket(0), 0.0f);
		converter.addOutputValue(getOutputSocket(1), 0.0f);
	}
}
コード例 #2
0
void MovieClipNode::convertToOperations(NodeConverter &converter, const CompositorContext &context) const
{
    NodeOutput *outputMovieClip = this->getOutputSocket(0);
    NodeOutput *alphaMovieClip = this->getOutputSocket(1);
    NodeOutput *offsetXMovieClip = this->getOutputSocket(2);
    NodeOutput *offsetYMovieClip = this->getOutputSocket(3);
    NodeOutput *scaleMovieClip = this->getOutputSocket(4);
    NodeOutput *angleMovieClip = this->getOutputSocket(5);

    bNode *editorNode = this->getbNode();
    MovieClip *movieClip = (MovieClip *)editorNode->id;
    MovieClipUser *movieClipUser = (MovieClipUser *)editorNode->storage;
    bool cacheFrame = !context.isRendering();

    ImBuf *ibuf = NULL;
    if (movieClip) {
        if (cacheFrame)
            ibuf = BKE_movieclip_get_ibuf(movieClip, movieClipUser);
        else
            ibuf = BKE_movieclip_get_ibuf_flag(movieClip, movieClipUser, movieClip->flag, MOVIECLIP_CACHE_SKIP);
    }

    // always connect the output image
    MovieClipOperation *operation = new MovieClipOperation();
    operation->setMovieClip(movieClip);
    operation->setMovieClipUser(movieClipUser);
    operation->setFramenumber(context.getFramenumber());
    operation->setCacheFrame(cacheFrame);

    converter.addOperation(operation);
    converter.mapOutputSocket(outputMovieClip, operation->getOutputSocket());
    converter.addPreview(operation->getOutputSocket());

    MovieClipAlphaOperation *alphaOperation = new MovieClipAlphaOperation();
    alphaOperation->setMovieClip(movieClip);
    alphaOperation->setMovieClipUser(movieClipUser);
    alphaOperation->setFramenumber(context.getFramenumber());
    alphaOperation->setCacheFrame(cacheFrame);

    converter.addOperation(alphaOperation);
    converter.mapOutputSocket(alphaMovieClip, alphaOperation->getOutputSocket());

    MovieTrackingStabilization *stab = &movieClip->tracking.stabilization;
    float loc[2], scale, angle;
    loc[0] = 0.0f;
    loc[1] = 0.0f;
    scale = 1.0f;
    angle = 0.0f;

    if (ibuf) {
        if (stab->flag & TRACKING_2D_STABILIZATION) {
            int clip_framenr = BKE_movieclip_remap_scene_to_clip_frame(movieClip, context.getFramenumber());

            BKE_tracking_stabilization_data_get(&movieClip->tracking, clip_framenr, ibuf->x, ibuf->y, loc, &scale, &angle);
        }
    }

    converter.addOutputValue(offsetXMovieClip, loc[0]);
    converter.addOutputValue(offsetYMovieClip, loc[1]);
    converter.addOutputValue(scaleMovieClip, scale);
    converter.addOutputValue(angleMovieClip, angle);

    if (ibuf) {
        IMB_freeImBuf(ibuf);
    }
}