diff --git a/src/PyMetadataFrame.cpp b/src/PyMetadataFrame.cpp deleted file mode 100644 index 448508e..0000000 --- a/src/PyMetadataFrame.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "PyMetadataFrame.hpp" - -PyMetadataFrame::PyMetadataFrame(int length_, int64_t timecode_, - const std::string &data_) - : _data(data_) { - length = length_; - timecode = timecode_; - p_data = &_data[0]; -} - -PyMetadataFrame::~PyMetadataFrame() {} - -const std::string &PyMetadataFrame::getData() const { return _data; } - -void PyMetadataFrame::setData(const std::string &data) { - _data = data; - p_data = &_data[0]; -} diff --git a/src/PyMetadataFrame.hpp b/src/PyMetadataFrame.hpp deleted file mode 100644 index 3584404..0000000 --- a/src/PyMetadataFrame.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#include - -#include - -class PyMetadataFrame : public NDIlib_metadata_frame_t { -public: - PyMetadataFrame(int length_, int64_t timecode_, const std::string &data_); - virtual ~PyMetadataFrame(); - - const std::string &getData() const; - void setData(const std::string &data); - -private: - std::string _data; -}; diff --git a/src/main.cpp b/src/main.cpp index 691ec1b..80f93f2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,7 +2,6 @@ #include #include "PyAudioFrame.hpp" -#include "PyMetadataFrame.hpp" #include "PyVideoFrame.hpp" namespace py = pybind11; @@ -190,14 +189,24 @@ PYBIND11_MODULE(NDIlib, m) { &PyAudioFrameV3::setMetadata) .def_readwrite("timestamp", &PyAudioFrameV3::timestamp); - py::class_(m, "MetadataFrame") - .def(py::init(), py::arg("length") = 0, + py::class_(m, "MetadataFrame") + .def(py::init(), py::arg("length") = 0, py::arg("timecode") = NDIlib_send_timecode_synthesize, - py::arg("data") = nullptr) - .def_readwrite("length", &PyMetadataFrame::length) - .def_readwrite("timecode", &PyMetadataFrame::timecode) - .def_property("data", &PyMetadataFrame::getData, - &PyMetadataFrame::setData); + py::arg("p_data") = nullptr) + .def_readwrite("length", &NDIlib_metadata_frame_t::length) + .def_readwrite("timecode", &NDIlib_metadata_frame_t::timecode) + .def_property( + "data", + [](const NDIlib_metadata_frame_t &self) { + auto ustr = PyUnicode_DecodeLocale(self.p_data, nullptr); + return py::reinterpret_steal(ustr); + }, + [](NDIlib_metadata_frame_t &self, const std::string &data) { + static std::unordered_map + strs; + strs[&self] = py::str(data); + self.p_data = strs[&self].data(); + }); py::class_(m, "Tally") .def(py::init(), py::arg("on_program") = false,