[Bf-blender-cvs] [80f1ab3] decklink: BGE: VideoTexture.DeckLink: add level attribute.
Benoit Bolsee
noreply at git.blender.org
Wed Apr 8 20:59:57 CEST 2015
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];
More information about the Bf-blender-cvs
mailing list