debug
This commit is contained in:
parent
0ea089203c
commit
ba09525535
|
@ -174,18 +174,23 @@ void init_numpy() {
|
||||||
BOOST_PYTHON_MODULE(rtc_plugins) {
|
BOOST_PYTHON_MODULE(rtc_plugins) {
|
||||||
try {
|
try {
|
||||||
init_numpy();
|
init_numpy();
|
||||||
void** numpy_api = (void**)PyArray_API;
|
void** numpyApi = (void**)PyArray_API;
|
||||||
if (!numpy_api || !numpy_api[93]) { // 93是PyArray_SimpleNew的偏移量
|
if (!numpyApi || !numpyApi[93]) { // 93是PyArray_SimpleNew的偏移量
|
||||||
std::cout << "NumPy API corrupt! Key functions missing." << std::endl;
|
std::cout << "NumPy API corrupt! Key functions missing." << std::endl;
|
||||||
PyErr_Print();
|
PyErr_Print();
|
||||||
throw std::runtime_error("Invalid NumPy API state");
|
throw std::runtime_error("Invalid NumPy API state");
|
||||||
|
} else {
|
||||||
|
RTCContext::instance().setNumpyApi(numpyApi);
|
||||||
|
std::cout << "set numpyApi succ" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
if (!PyArray_API) {
|
if (!PyArray_API) {
|
||||||
std::cout << "PyArray_API is null" << std::endl;
|
std::cout << "PyArray_API is null" << std::endl;
|
||||||
} else {
|
} else {
|
||||||
std::cout << "PyArray_API is not null" << std::endl;
|
std::cout << "PyArray_API is not null" << std::endl;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
py::def("init", &init);
|
py::def("init", &init);
|
||||||
py::def("initRecv", &initRecv);
|
py::def("initRecv", &initRecv);
|
||||||
|
|
|
@ -72,7 +72,13 @@ void RTCContext::onAudioProcess(const char* roomId, const char* peerId,
|
||||||
<< " (max: " << std::numeric_limits<npy_intp>::max() << ")" << std::endl;
|
<< " (max: " << std::numeric_limits<npy_intp>::max() << ")" << std::endl;
|
||||||
|
|
||||||
|
|
||||||
auto numpyApi = RTCContext::numpy_api();
|
void** numpyApi = numpyApi_;
|
||||||
|
if (!numpyApi || !numpyApi[93]) { // 93是PyArray_SimpleNew的偏移量
|
||||||
|
std::cout << "NumPy API corrupt! Key functions missing." << std::endl;
|
||||||
|
} else {
|
||||||
|
std::cout << "PyArray_API is not null in init" << std::endl;
|
||||||
|
}
|
||||||
|
//auto numpyApi = RTCContext::numpy_api();
|
||||||
std::cout << "step1" << std::endl;
|
std::cout << "step1" << std::endl;
|
||||||
if (!numpyApi) {
|
if (!numpyApi) {
|
||||||
PyGILState_Release(gstate);
|
PyGILState_Release(gstate);
|
||||||
|
@ -81,7 +87,7 @@ void RTCContext::onAudioProcess(const char* roomId, const char* peerId,
|
||||||
std::cout << "step2" << std::endl;
|
std::cout << "step2" << std::endl;
|
||||||
using PyArray_SimpleNew_t = PyObject*(*)(int, npy_intp*, int);
|
using PyArray_SimpleNew_t = PyObject*(*)(int, npy_intp*, int);
|
||||||
std::cout << "step3" << std::endl;
|
std::cout << "step3" << std::endl;
|
||||||
auto PyArray_SimpleNew = reinterpret_cast<PyArray_SimpleNew_t>(numpy_api[93]);
|
auto PyArray_SimpleNew = reinterpret_cast<PyArray_SimpleNew_t>(numpyApi[93]);
|
||||||
std::cout << "step4" << std::endl;
|
std::cout << "step4" << std::endl;
|
||||||
|
|
||||||
// 3. 严格校验输入数据
|
// 3. 严格校验输入数据
|
||||||
|
@ -123,9 +129,9 @@ void RTCContext::onAudioProcess(const char* roomId, const char* peerId,
|
||||||
|
|
||||||
std::cout << "step11" << std::endl;
|
std::cout << "step11" << std::endl;
|
||||||
// 7. 执行回调(带引用计数保护)
|
// 7. 执行回调(带引用计数保护)
|
||||||
if (!py_callback_.is_none()) {
|
if (!pyCallback_.is_none()) {
|
||||||
try {
|
try {
|
||||||
py_callback_(
|
pyCallback_(
|
||||||
py::handle<>(pyArray), // 自动管理引用
|
py::handle<>(pyArray), // 自动管理引用
|
||||||
audioFrame.dataCount,
|
audioFrame.dataCount,
|
||||||
audioFrame.sampleRate,
|
audioFrame.sampleRate,
|
||||||
|
@ -158,8 +164,9 @@ void RTCContext::onProducer(uint32_t msgId, mrtc::MRTCProducerInfo& info)
|
||||||
}
|
}
|
||||||
bool RTCContext::init(const char* selfUserId, const char* selfDisplayName, const char* selfRoomId)
|
bool RTCContext::init(const char* selfUserId, const char* selfDisplayName, const char* selfRoomId)
|
||||||
{
|
{
|
||||||
if (!PyArray_API) {
|
void** numpyApi = numpyApi_;
|
||||||
std::cout << "PyArray_API is null in init" << std::endl;
|
if (!numpyApi || !numpyApi[93]) { // 93是PyArray_SimpleNew的偏移量
|
||||||
|
std::cout << "NumPy API corrupt! Key functions missing." << std::endl;
|
||||||
} else {
|
} else {
|
||||||
std::cout << "PyArray_API is not null in init" << std::endl;
|
std::cout << "PyArray_API is not null in init" << std::endl;
|
||||||
}
|
}
|
||||||
|
@ -213,8 +220,9 @@ bool RTCContext::init(const char* selfUserId, const char* selfDisplayName, const
|
||||||
}
|
}
|
||||||
bool RTCContext::initRecv(const char* destRoomId, const char* srcUserId, const int16_t destChannelIndex)
|
bool RTCContext::initRecv(const char* destRoomId, const char* srcUserId, const int16_t destChannelIndex)
|
||||||
{
|
{
|
||||||
if (!PyArray_API) {
|
void** numpyApi = numpyApi_;
|
||||||
std::cout << "PyArray_API is null in init" << std::endl;
|
if (!numpyApi || !numpyApi[93]) { // 93是PyArray_SimpleNew的偏移量
|
||||||
|
std::cout << "NumPy API corrupt! Key functions missing." << std::endl;
|
||||||
} else {
|
} else {
|
||||||
std::cout << "PyArray_API is not null in init" << std::endl;
|
std::cout << "PyArray_API is not null in init" << std::endl;
|
||||||
}
|
}
|
||||||
|
@ -316,5 +324,9 @@ void RTCContext::setpData(void* pData)
|
||||||
}
|
}
|
||||||
void RTCContext::setPyCallback(boost::python::object callback) {
|
void RTCContext::setPyCallback(boost::python::object callback) {
|
||||||
std::lock_guard<std::mutex> lock(mutex_);
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
py_callback_ = callback;
|
pyCallback_ = callback;
|
||||||
|
}
|
||||||
|
void RTCContext::setNumpyApi(void **numpyApi) {
|
||||||
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
|
numpyApi_ = numpyApi;
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,6 +85,7 @@ public:
|
||||||
void* getpData() const;
|
void* getpData() const;
|
||||||
void setpData(void* pData);
|
void setpData(void* pData);
|
||||||
void setPyCallback(boost::python::object callback);
|
void setPyCallback(boost::python::object callback);
|
||||||
|
void setNumpyApi(void** numpyApi);
|
||||||
|
|
||||||
int16_t sendAudioData(uint8_t channelIndex = 0, const void* pData = nullptr, int32_t nSampleRate = 48000, uint64_t nNumberOfChannels = 2, uint64_t dataLength = 0);
|
int16_t sendAudioData(uint8_t channelIndex = 0, const void* pData = nullptr, int32_t nSampleRate = 48000, uint64_t nNumberOfChannels = 2, uint64_t dataLength = 0);
|
||||||
int16_t sendCustomAudioData(const int16_t channelIndex, void* customData, int32_t sampleRate,
|
int16_t sendCustomAudioData(const int16_t channelIndex, void* customData, int32_t sampleRate,
|
||||||
|
@ -101,7 +102,8 @@ private:
|
||||||
bool isOnRoom_ = false;
|
bool isOnRoom_ = false;
|
||||||
bool isOnConsumer_ = false;
|
bool isOnConsumer_ = false;
|
||||||
bool isJoinMultiRoom_ = false;
|
bool isJoinMultiRoom_ = false;
|
||||||
boost::python::object py_callback_;
|
boost::python::object pyCallback_;
|
||||||
|
void ** numpyApi_;
|
||||||
void onRoom(uint32_t typeId, RTCENGINE_NAMESPACE::MRTCRoomInfo& roomInfo);
|
void onRoom(uint32_t typeId, RTCENGINE_NAMESPACE::MRTCRoomInfo& roomInfo);
|
||||||
void onConsumer(uint32_t msgId, const char* roomId, const char* peerId, RTCENGINE_NAMESPACE::MRTCConsumerInfo& consumerInfo);
|
void onConsumer(uint32_t msgId, const char* roomId, const char* peerId, RTCENGINE_NAMESPACE::MRTCConsumerInfo& consumerInfo);
|
||||||
void onRender(const char* roomId, const char* peerId,
|
void onRender(const char* roomId, const char* peerId,
|
||||||
|
|
Loading…
Reference in New Issue