debug
This commit is contained in:
parent
b39a0657bc
commit
c98b283bdf
|
@ -17,7 +17,8 @@ add_executable(rtc_plugins
|
||||||
util/RTCContext.cpp
|
util/RTCContext.cpp
|
||||||
rtc_plugins.cpp
|
rtc_plugins.cpp
|
||||||
util/RTCContext.cpp
|
util/RTCContext.cpp
|
||||||
util/numpyConfig.h)
|
util/numpyConfig.h
|
||||||
|
util/numpyStub.h)
|
||||||
|
|
||||||
add_library(rtc_plugins_lib SHARED rtc_plugins.cpp
|
add_library(rtc_plugins_lib SHARED rtc_plugins.cpp
|
||||||
util/RTCContext.cpp)
|
util/RTCContext.cpp)
|
||||||
|
|
|
@ -1,8 +1,18 @@
|
||||||
// rtc_plugins.cpp
|
// rtc_plugins.cpp
|
||||||
|
|
||||||
#include "./util/numpyConfig.h"
|
//#include "./util/numpyConfig.h"
|
||||||
#include "./util/RTCContext.h"
|
#include "./util/RTCContext.h"
|
||||||
|
|
||||||
|
#define PY_ARRAY_UNIQUE_SYMBOL RTC_PLUGINS_ARRAY_API_IMPL // 内部实现专用符号
|
||||||
|
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
|
||||||
|
|
||||||
|
#include <numpy/arrayobject.h>
|
||||||
|
|
||||||
|
// 提供转换接口
|
||||||
|
void** get_numpy_api() {
|
||||||
|
return (void**)RTC_PLUGINS_ARRAY_API_IMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace py = boost::python;
|
namespace py = boost::python;
|
||||||
|
|
||||||
|
|
|
@ -72,10 +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;
|
||||||
|
|
||||||
|
|
||||||
if (!PyArray_API) {
|
auto numpyApi = RTCContext::numpy_api();
|
||||||
|
if (!numpyApi) {
|
||||||
PyGILState_Release(gstate);
|
PyGILState_Release(gstate);
|
||||||
throw std::runtime_error("NumPy C-API not initialized. Call import_array() in module init");
|
throw std::runtime_error("NumPy C-API not initialized. Call import_array() in module init");
|
||||||
}
|
}
|
||||||
|
using PyArray_SimpleNew_t = PyObject*(*)(int, npy_intp*, int);
|
||||||
|
auto PyArray_SimpleNew = reinterpret_cast<PyArray_SimpleNew_t>(numpy_api[93]);
|
||||||
|
|
||||||
// 3. 严格校验输入数据
|
// 3. 严格校验输入数据
|
||||||
if (!audioFrame.data || audioFrame.dataCount <= 0) {
|
if (!audioFrame.data || audioFrame.dataCount <= 0) {
|
||||||
|
@ -92,12 +95,10 @@ void RTCContext::onAudioProcess(const char* roomId, const char* peerId,
|
||||||
|
|
||||||
// 5. 创建NumPy数组(带内存保护)
|
// 5. 创建NumPy数组(带内存保护)
|
||||||
PyObject* pyArray = nullptr;
|
PyObject* pyArray = nullptr;
|
||||||
{
|
pyArray = PyArray_SimpleNew(1, dims, NPY_INT16);
|
||||||
pyArray = PyArray_SimpleNew(1, dims, NPY_INT16);
|
if (!pyArray) {
|
||||||
if (!pyArray) {
|
PyGILState_Release(gstate);
|
||||||
PyGILState_Release(gstate);
|
throw std::bad_alloc();
|
||||||
throw std::bad_alloc();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. 安全拷贝数据(带对齐检查)
|
// 6. 安全拷贝数据(带对齐检查)
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
//#include "numpyConfig.h"
|
//#include "numpyConfig.h"
|
||||||
|
#include "numpyStub.h"
|
||||||
extern void* RTC_PLUGINS_ARRAY_API[];
|
|
||||||
|
|
||||||
#include "IMRTCEngine.hpp"
|
#include "IMRTCEngine.hpp"
|
||||||
#include "MRTCEngineDefine.hpp"
|
#include "MRTCEngineDefine.hpp"
|
||||||
|
@ -57,6 +56,13 @@ public:
|
||||||
static RTCContext instance;
|
static RTCContext instance;
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
static void** numpy_api() {
|
||||||
|
static void** api = [](){
|
||||||
|
// 延迟获取实际指针
|
||||||
|
return reinterpret_cast<void**>(RTC_PLUGINS_ARRAY_API);
|
||||||
|
}();
|
||||||
|
return api;
|
||||||
|
}
|
||||||
RTCContext(const RTCContext&) = delete;
|
RTCContext(const RTCContext&) = delete;
|
||||||
RTCContext& operator=(const RTCContext&) = delete;
|
RTCContext& operator=(const RTCContext&) = delete;
|
||||||
mrtc::IMRTCEngine* getRtcEngine() const;
|
mrtc::IMRTCEngine* getRtcEngine() const;
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
// numpy_stub.h
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// 声明为不完整类型(阻止链接器匹配)
|
||||||
|
extern struct NumPyAPIWrapper* RTC_PLUGINS_ARRAY_API;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
Loading…
Reference in New Issue