Skip to content

Commit 3473e01

Browse files
committed
Add getSenderList, getSenderInfo, getActiveSender, setActiveSender
1 parent 742803f commit 3473e01

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

examples/data/receiver.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import numpy as np
2-
31
import SpoutGL
42
from OpenGL import GL
53
from itertools import repeat

examples/senders/list.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import SpoutGL
2+
3+
with SpoutGL.SpoutReceiver() as receiver:
4+
active = receiver.getActiveSender()
5+
6+
for sender_name in receiver.getSenderList():
7+
sender_info = receiver.getSenderInfo(sender_name)
8+
print("%s (%dx%d)%s" % (sender_name, sender_info.width, sender_info.height, " [active]" if sender_name == active else ""))

src/PySpoutGL.cpp

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ int getBytesPerPixel(GLenum format) {
6666
}
6767
}
6868

69+
struct SenderInfo {
70+
SenderInfo(std::string name, unsigned int w, unsigned int h): width(w), height(h), dxShareHandle(NULL), dwFormat(0) {}
71+
72+
std::string name;
73+
unsigned int width;
74+
unsigned int height;
75+
HANDLE dxShareHandle;
76+
DWORD dwFormat;
77+
};
78+
6979
template<typename T>
7080
py::class_<T> &addCommonDefs(py::class_<T> &clazz) {
7181
return clazz
@@ -75,7 +85,28 @@ py::class_<T> &addCommonDefs(py::class_<T> &clazz) {
7585
.def("getCPUshare", &T::GetCPUshare)
7686
.def("setCPUshare", &T::SetCPUshare)
7787
.def("createOpenGL", &T::CreateOpenGL)
78-
.def("closeOpenGL", &T::CloseOpenGL);
88+
.def("closeOpenGL", &T::CloseOpenGL)
89+
.def("setActiveSender", &T::SetActiveSender)
90+
.def("getActiveSender", [](T& spoutWrapper) -> py::object {
91+
std::vector<char> senderNameBuf(256);
92+
if (spoutWrapper.GetActiveSender(senderNameBuf.data())) {
93+
return py::str(senderNameBuf.data());
94+
} else {
95+
return py::none();
96+
}
97+
})
98+
.def("getSenderInfo", [](T& spoutWrapper, std::string senderName) -> py::object {
99+
unsigned int width;
100+
unsigned int height;
101+
HANDLE dxShareHandle;
102+
DWORD dwFormat;
103+
104+
if (spoutWrapper.GetSenderInfo(senderName.c_str(), width, height, dxShareHandle, dwFormat)) {
105+
return py::cast(new SenderInfo(senderName, width, height));
106+
} else {
107+
return py::none();
108+
}
109+
});
79110
}
80111

81112
PYBIND11_MODULE(_spoutgl, m) {
@@ -85,6 +116,11 @@ PYBIND11_MODULE(_spoutgl, m) {
85116
86117
.. currentmodule:: SpoutGL
87118
)pbdoc";
119+
120+
py::class_<SenderInfo>(m, "SenderInfo")
121+
.def_readonly("name", &SenderInfo::name)
122+
.def_readonly("width", &SenderInfo::width)
123+
.def_readonly("height", &SenderInfo::height);
88124

89125
addCommonDefs(py::class_<SpoutSender>(m, "SpoutSender")
90126
.def(py::init<>())
@@ -168,6 +204,7 @@ PYBIND11_MODULE(_spoutgl, m) {
168204
py::gil_scoped_release release; // Safe? https://mail.python.org/pipermail/python-dev/2018-July/154652.html
169205
return receiver.ReceiveImage(static_cast<unsigned char*>(bufferInfo.ptr), glFormat, invert, hostFbo);
170206
})
207+
.def("getSenderList", &SpoutReceiver::GetSenderList)
171208
.def("getSenderName", &SpoutReceiver::GetSenderWidth)
172209
.def("getSenderWidth", &SpoutReceiver::GetSenderWidth)
173210
.def("getSenderHeight", &SpoutReceiver::GetSenderHeight)

0 commit comments

Comments
 (0)