From 3f2e0b150b193852eea235b178208d3fa3113ee8 Mon Sep 17 00:00:00 2001 From: Naoto Kondo Date: Sat, 25 Apr 2020 03:19:04 +0900 Subject: [PATCH] Update ndi recv --- src/main.cpp | 100 ++++++++++++++++++++++++--------------------------- 1 file changed, 46 insertions(+), 54 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 8f6f05f..d1c259c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -276,78 +276,63 @@ PYBIND11_MODULE(NDIlib, m) { py::arg("instance"), py::arg("timeout_in_ms")); // Processing.NDI.Recv - enum RecvBandwidth { - RECV_BANDWIDTH_METADATA_ONLY = NDIlib_recv_bandwidth_metadata_only, - RECV_BANDWIDTH_AUDIO_ONLY = NDIlib_recv_bandwidth_audio_only, - RECV_BANDWIDTH_LOWEST = NDIlib_recv_bandwidth_lowest, - RECV_BANDWIDTH_HIGHEST = NDIlib_recv_bandwidth_highest - }; - - py::enum_(m, "RecvBandwidth", py::arithmetic()) + py::enum_(m, "RecvBandwidth", py::arithmetic()) .value("RECV_BANDWIDTH_METADATA_ONLY", - RecvBandwidth::RECV_BANDWIDTH_METADATA_ONLY) - .value("RECV_BANDWIDTH_AUDIO_ONLY", - RecvBandwidth::RECV_BANDWIDTH_AUDIO_ONLY) - .value("RECV_BANDWIDTH_LOWEST", RecvBandwidth::RECV_BANDWIDTH_LOWEST) - .value("RECV_BANDWIDTH_HIGHEST", RecvBandwidth::RECV_BANDWIDTH_HIGHEST) + NDIlib_recv_bandwidth_metadata_only) + .value("RECV_BANDWIDTH_AUDIO_ONLY", NDIlib_recv_bandwidth_audio_only) + .value("RECV_BANDWIDTH_LOWEST", NDIlib_recv_bandwidth_lowest) + .value("RECV_BANDWIDTH_HIGHEST", NDIlib_recv_bandwidth_highest) + .value("RECV_BANDWIDTH_MAX", NDIlib_recv_bandwidth_max) .export_values(); - enum RecvColorFormat { - RECV_COLOR_FORMAT_BGRX_BGRA = NDIlib_recv_color_format_BGRX_BGRA, - RECV_COLOR_FORMAT_UYVY_BGRA = NDIlib_recv_color_format_UYVY_BGRA, - RECV_COLOR_FORMAT_RGBX_RGBA = NDIlib_recv_color_format_RGBX_RGBA, - RECV_COLOR_FORMAT_UYVY_RGBA = NDIlib_recv_color_format_UYVY_RGBA, -#ifdef _WIN32 - RECV_COLOR_FORMAT_BGRX_BGRA_FLIPPED = - NDIlib_recv_color_format_BGRX_BGRA_flipped, -#endif - RECV_COLOR_FORMAT_FASTEST = NDIlib_recv_color_format_fastest, - RECV_COLOR_FORMAT_E_BGRX_BGRA = NDIlib_recv_color_format_e_BGRX_BGRA, - RECV_COLOR_FORMAT_E_UYVY_BGRA = NDIlib_recv_color_format_e_UYVY_BGRA, - RECV_COLOR_FORMAT_E_RGBX_RGBA = NDIlib_recv_color_format_e_RGBX_RGBA, - RECV_COLOR_FORMAT_E_UYVY_RGBA = NDIlib_recv_color_format_e_UYVY_RGBA - }; - - py::enum_(m, "RecvColorFormat", py::arithmetic()) - .value("RECV_COLOR_FORMAT_BGRX_BGRA", - RecvColorFormat::RECV_COLOR_FORMAT_BGRX_BGRA) - .value("RECV_COLOR_FORMAT_UYVY_BGRA", - RecvColorFormat::RECV_COLOR_FORMAT_UYVY_BGRA) - .value("RECV_COLOR_FORMAT_RGBX_RGBA", - RecvColorFormat::RECV_COLOR_FORMAT_RGBX_RGBA) - .value("RECV_COLOR_FORMAT_UYVY_RGBA", - RecvColorFormat::RECV_COLOR_FORMAT_UYVY_RGBA) + py::enum_(m, "RecvColorFormat", py::arithmetic()) + .value("RECV_COLOR_FORMAT_BGRX_BGRA", NDIlib_recv_color_format_BGRX_BGRA) + .value("RECV_COLOR_FORMAT_UYVY_BGRA", NDIlib_recv_color_format_UYVY_BGRA) + .value("RECV_COLOR_FORMAT_RGBX_RGBA", NDIlib_recv_color_format_RGBX_RGBA) + .value("RECV_COLOR_FORMAT_UYVY_RGBA", NDIlib_recv_color_format_UYVY_RGBA) + .value("RECV_COLOR_FORMAT_FASTEST", NDIlib_recv_color_format_fastest) + .value("RECV_COLOR_FORMAT_BEST", NDIlib_recv_color_format_best) + .value("RECV_COLOR_FORMAT_E_BGRX_BGRA", + NDIlib_recv_color_format_e_BGRX_BGRA) + .value("RECV_COLOR_FORMAT_E_UYVY_BGRA", + NDIlib_recv_color_format_e_UYVY_BGRA) + .value("RECV_COLOR_FORMAT_E_RGBX_RGBA", + NDIlib_recv_color_format_e_RGBX_RGBA) + .value("RECV_COLOR_FORMAT_E_UYVY_RGBA", + NDIlib_recv_color_format_e_UYVY_RGBA) #ifdef _WIN32 .value("RECV_COLOR_FORMAT_BGRX_BGRA_FLIPPED", - RecvColorFormat::RECV_COLOR_FORMAT_BGRX_BGRA_FLIPPED) + 1000 + NDIlib_recv_color_format_BGRX_BGRA) #endif - .value("RECV_COLOR_FORMAT_FASTEST", - RecvColorFormat::RECV_COLOR_FORMAT_FASTEST) - .value("RECV_COLOR_FORMAT_E_BGRX_BGRA", - RecvColorFormat::RECV_COLOR_FORMAT_E_BGRX_BGRA) - .value("RECV_COLOR_FORMAT_E_UYVY_BGRA", - RecvColorFormat::RECV_COLOR_FORMAT_E_UYVY_BGRA) - .value("RECV_COLOR_FORMAT_E_RGBX_RGBA", - RecvColorFormat::RECV_COLOR_FORMAT_E_RGBX_RGBA) - .value("RECV_COLOR_FORMAT_E_UYVY_RGBA", - RecvColorFormat::RECV_COLOR_FORMAT_E_UYVY_RGBA) + .value("RECV_COLOR_FORMAT_MAX", NDIlib_recv_color_format_max) .export_values(); py::class_(m, "RecvCreateV3") .def(py::init(), py::arg("source_to_connect_to") = NDIlib_source_t(), - py::arg("color_format") = RECV_COLOR_FORMAT_UYVY_BGRA, - py::arg("bandwidth") = RECV_BANDWIDTH_HIGHEST, - py::arg("allow_video_fields") = true, py::arg("ndi_name") = nullptr) + py::arg("color_format") = NDIlib_recv_color_format_UYVY_BGRA, + py::arg("bandwidth") = NDIlib_recv_bandwidth_highest, + py::arg("allow_video_fields") = true, + py::arg("p_ndi_recv_name") = nullptr) .def_readwrite("source_to_connect_to", &NDIlib_recv_create_v3_t::source_to_connect_to) .def_readwrite("color_format", &NDIlib_recv_create_v3_t::color_format) .def_readwrite("bandwidth", &NDIlib_recv_create_v3_t::bandwidth) .def_readwrite("allow_video_fields", &NDIlib_recv_create_v3_t::allow_video_fields) - .def_readwrite("ndi_recv_name", - &NDIlib_recv_create_v3_t::p_ndi_recv_name); + .def_property( + "ndi_recv_name", + [](const NDIlib_recv_create_v3_t &self) { + auto ustr = PyUnicode_DecodeLocale(self.p_ndi_recv_name, nullptr); + return py::reinterpret_steal(ustr); + }, + [](NDIlib_recv_create_v3_t &self, const std::string &ndi_recv_name) { + static std::unordered_map + strs; + strs[&self] = py::str(ndi_recv_name); + self.p_ndi_recv_name = strs[&self].c_str(); + }); py::class_(m, "RecvPerformance") .def(py::init<>()) @@ -374,12 +359,19 @@ PYBIND11_MODULE(NDIlib, m) { py::arg("video_data"), py::arg("audio_data"), py::arg("metadata"), py::arg("timeout_in_ms")); + m.def("recv_capture_v3", &NDIlib_recv_capture_v3, py::arg("instance"), + py::arg("video_data"), py::arg("audio_data"), py::arg("metadata"), + py::arg("timeout_in_ms")); + m.def("recv_free_video_v2", &NDIlib_recv_free_video_v2, py::arg("instance"), py::arg("video_data")); m.def("recv_free_audio_v2", &NDIlib_recv_free_audio_v2, py::arg("instance"), py::arg("audio_data")); + m.def("recv_free_audio_v3", &NDIlib_recv_free_audio_v3, py::arg("instance"), + py::arg("audio_data")); + m.def("recv_free_metadata", &NDIlib_recv_free_metadata, py::arg("instance"), py::arg("metadata"));