Commit: c749fe40317b6d1bcc4aa7230f660b8704878f69
Author: Sergey Sharybin
Date:   Fri Aug 28 18:44:27 2015 +0200
Branches: master
https://developer.blender.org/rBc749fe40317b6d1bcc4aa7230f660b8704878f69

Fix T45736: Channel key error: color spaces modes

Was missing conversion back to RGB space.

===================================================================

M       source/blender/compositor/nodes/COM_ChannelMatteNode.cpp

===================================================================

diff --git a/source/blender/compositor/nodes/COM_ChannelMatteNode.cpp 
b/source/blender/compositor/nodes/COM_ChannelMatteNode.cpp
index b04f86d..cf0f471 100644
--- a/source/blender/compositor/nodes/COM_ChannelMatteNode.cpp
+++ b/source/blender/compositor/nodes/COM_ChannelMatteNode.cpp
@@ -33,41 +33,45 @@ ChannelMatteNode::ChannelMatteNode(bNode *editorNode) : 
Node(editorNode)
 void ChannelMatteNode::convertToOperations(NodeConverter &converter, const 
CompositorContext &/*context*/) const
 {
        bNode *node = this->getbNode();
-       
+
        NodeInput *inputSocketImage = this->getInputSocket(0);
        NodeOutput *outputSocketImage = this->getOutputSocket(0);
        NodeOutput *outputSocketMatte = this->getOutputSocket(1);
-       
-       NodeOperation *convert = NULL;
+
+       NodeOperation *convert = NULL, *inv_convert = NULL;
        /* colorspace */
        switch (node->custom1) {
                case CMP_NODE_CHANNEL_MATTE_CS_RGB:
                        break;
                case CMP_NODE_CHANNEL_MATTE_CS_HSV: /* HSV */
                        convert = new ConvertRGBToHSVOperation();
+                       inv_convert = new ConvertHSVToRGBOperation();
                        break;
                case CMP_NODE_CHANNEL_MATTE_CS_YUV: /* YUV */
                        convert = new ConvertRGBToYUVOperation();
+                       inv_convert = new ConvertYUVToRGBOperation();
                        break;
                case CMP_NODE_CHANNEL_MATTE_CS_YCC: /* YCC */
                        convert = new ConvertRGBToYCCOperation();
                        ((ConvertRGBToYCCOperation *)convert)->setMode(0); /* 
BLI_YCC_ITU_BT601 */
+                       inv_convert = new ConvertYCCToRGBOperation();
+                       ((ConvertRGBToYCCOperation *)inv_convert)->setMode(0); 
/* BLI_YCC_ITU_BT601 */
                        break;
                default:
                        break;
        }
-       
+
        ChannelMatteOperation *operation = new ChannelMatteOperation();
        /* pass the ui properties to the operation */
        operation->setSettings((NodeChroma *)node->storage, node->custom2);
        converter.addOperation(operation);
-       
+
        SetAlphaOperation *operationAlpha = new SetAlphaOperation();
        converter.addOperation(operationAlpha);
-       
-       if (convert) {
+
+       if (convert != NULL) {
                converter.addOperation(convert);
-               
+
                converter.mapInputSocket(inputSocketImage, 
convert->getInputSocket(0));
                converter.addLink(convert->getOutputSocket(), 
operation->getInputSocket(0));
                converter.addLink(convert->getOutputSocket(), 
operationAlpha->getInputSocket(0));
@@ -76,11 +80,18 @@ void ChannelMatteNode::convertToOperations(NodeConverter 
&converter, const Compo
                converter.mapInputSocket(inputSocketImage, 
operation->getInputSocket(0));
                converter.mapInputSocket(inputSocketImage, 
operationAlpha->getInputSocket(0));
        }
-       
+
        converter.mapOutputSocket(outputSocketMatte, 
operation->getOutputSocket(0));
-       
        converter.addLink(operation->getOutputSocket(), 
operationAlpha->getInputSocket(1));
-       converter.mapOutputSocket(outputSocketImage, 
operationAlpha->getOutputSocket());
-       
+
+       if (inv_convert != NULL) {
+               converter.addOperation(inv_convert);
+               converter.addLink(operationAlpha->getOutputSocket(0), 
inv_convert->getInputSocket(0));
+               converter.mapOutputSocket(outputSocketImage, 
inv_convert->getOutputSocket());
+       }
+       else {
+               converter.mapOutputSocket(outputSocketImage, 
operationAlpha->getOutputSocket());
+       }
+
        converter.addPreview(operationAlpha->getOutputSocket());
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to