Commit: 80f1ab3b62a1d4b1a13734a639358fd2bff57be4
Author: Benoit Bolsee
Date:   Wed Apr 8 20:57:43 2015 +0200
Branches: decklink
https://developer.blender.org/rB80f1ab3b62a1d4b1a13734a639358fd2bff57be4

BGE: VideoTexture.DeckLink: add level attribute.

Allows to control the keying level once keying is enabled.

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

M       source/gameengine/VideoTexture/DeckLink.cpp
M       source/gameengine/VideoTexture/DeckLink.h

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

diff --git a/source/gameengine/VideoTexture/DeckLink.cpp 
b/source/gameengine/VideoTexture/DeckLink.cpp
index 9bfb041..da4d7da 100644
--- a/source/gameengine/VideoTexture/DeckLink.cpp
+++ b/source/gameengine/VideoTexture/DeckLink.cpp
@@ -192,6 +192,7 @@ static void decklink_Reset(DeckLink *self)
        self->mFrame = NULL;
        self->mKeyer = NULL;
        self->mUseKeying = false;
+       self->mKeyingLevel = 255;
 }
 
 #ifdef __BIG_ENDIAN__
@@ -557,6 +558,7 @@ static int DeckLink_setKeying(DeckLink *self, PyObject 
*value, void *closure)
                                return -1;
                        }
                        self->mUseKeying = true;
+                       self->mKeyer->SetLevel(self->mKeyingLevel);
                }
                else
                {
@@ -568,6 +570,37 @@ static int DeckLink_setKeying(DeckLink *self, PyObject 
*value, void *closure)
        return 0;
 }
 
+static PyObject *DeckLink_getLevel(DeckLink *self, PyObject *value, void 
*closure)
+{
+       return Py_BuildValue("h", self->mKeyingLevel);
+}
+
+static int DeckLink_setLevel(DeckLink *self, PyObject *value, void *closure)
+{
+       long level;
+       if (value == NULL || !PyLong_Check(value))
+       {
+               PyErr_SetString(PyExc_TypeError, "The value must be an integer 
from 0 to 255");
+               return -1;
+       }
+       level = PyLong_AsLong(value);
+       if (level > 255)
+               level = 255;
+       else if (level < 0)
+               level = 0;
+       self->mKeyingLevel = (uint8_t)level;
+       if (self->mUseKeying)
+       {
+               if (self->mKeyer->SetLevel(self->mKeyingLevel) != S_OK)
+               {
+                       PyErr_SetString(PyExc_RuntimeError, "Error changin 
level of keyer");
+                       return -1;
+               }
+       }
+       // success
+       return 0;
+}
+
 static PyObject *DeckLink_getExtend(DeckLink *self, PyObject *value, void 
*closure)
 {
        if (self->mUseExtend) Py_RETURN_TRUE;
@@ -597,7 +630,8 @@ static PyMethodDef decklinkMethods[] =
 static PyGetSetDef decklinkGetSets[] =
 { 
        {(char*)"source", (getter)DeckLink_getSource, 
(setter)DeckLink_setSource, (char*)"source of decklink", NULL},
-       { (char*)"keying", (getter)DeckLink_getKeying, 
(setter)DeckLink_setKeying, (char*)"whether keying is enabled", NULL },
+       { (char*)"keying", (getter)DeckLink_getKeying, 
(setter)DeckLink_setKeying, (char*)"whether keying is enabled (frame is 
alpha-composited with passthrough output)", NULL },
+       { (char*)"level", (getter)DeckLink_getLevel, (setter)DeckLink_setLevel, 
(char*)"change the level of keying (overall alpha level of key frame, 0 to 
255)", NULL },
        { (char*)"extend", (getter)DeckLink_getExtend, 
(setter)DeckLink_setExtend, (char*)"whether image should stretched to fit 
frame", NULL },
        { NULL }
 };
diff --git a/source/gameengine/VideoTexture/DeckLink.h 
b/source/gameengine/VideoTexture/DeckLink.h
index 704db7b..21385ad 100644
--- a/source/gameengine/VideoTexture/DeckLink.h
+++ b/source/gameengine/VideoTexture/DeckLink.h
@@ -61,6 +61,7 @@ struct DeckLink
        bool mUseExtend;
        bool mKeyingSupported;
        bool mHDKeyingSupported;
+       uint8_t mKeyingLevel;
        BMDDisplayMode mDisplayMode;
        short mSize[2];

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

Reply via email to