[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