From 99f6c1fce35b635b01091d5ef71c6d4df1ea73c3 Mon Sep 17 00:00:00 2001 From: wangjiyu Date: Thu, 10 Apr 2025 18:18:56 +0800 Subject: [PATCH] debug --- util/RTCContext.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/util/RTCContext.cpp b/util/RTCContext.cpp index b4b777c..cdd18ef 100644 --- a/util/RTCContext.cpp +++ b/util/RTCContext.cpp @@ -73,33 +73,42 @@ void RTCContext::onAudioProcess(const char* roomId, const char* peerId, auto numpyApi = RTCContext::numpy_api(); + std::cout << "step1" << std::endl; if (!numpyApi) { PyGILState_Release(gstate); throw std::runtime_error("NumPy C-API not initialized. Call import_array() in module init"); } + std::cout << "step2" << std::endl; using PyArray_SimpleNew_t = PyObject*(*)(int, npy_intp*, int); + std::cout << "step3" << std::endl; auto PyArray_SimpleNew = reinterpret_cast(numpy_api[93]); + std::cout << "step4" << std::endl; // 3. 严格校验输入数据 if (!audioFrame.data || audioFrame.dataCount <= 0) { PyGILState_Release(gstate); throw std::invalid_argument("Invalid audio frame data"); } + std::cout << "step5" << std::endl; // 4. 安全创建维度数组(带边界检查) if (audioFrame.dataCount > std::numeric_limits::max()) { PyGILState_Release(gstate); throw std::overflow_error("Audio frame size exceeds maximum limit"); } + std::cout << "step6" << std::endl; npy_intp dims[1] = {static_cast(audioFrame.dataCount)}; + std::cout << "step7" << std::endl; // 5. 创建NumPy数组(带内存保护) PyObject* pyArray = nullptr; pyArray = PyArray_SimpleNew(1, dims, NPY_INT16); + std::cout << "step8" << std::endl; if (!pyArray) { PyGILState_Release(gstate); throw std::bad_alloc(); } + std::cout << "step9" << std::endl; // 6. 安全拷贝数据(带对齐检查) if (reinterpret_cast(audioFrame.data) % alignof(int16_t) != 0) { @@ -107,10 +116,12 @@ void RTCContext::onAudioProcess(const char* roomId, const char* peerId, PyGILState_Release(gstate); throw std::runtime_error("Unaligned audio data pointer"); } + std::cout << "step10" << std::endl; std::memcpy(PyArray_DATA(reinterpret_cast(pyArray)), audioFrame.data, audioFrame.dataCount * sizeof(int16_t)); + std::cout << "step11" << std::endl; // 7. 执行回调(带引用计数保护) if (!py_callback_.is_none()) { try { @@ -126,10 +137,13 @@ void RTCContext::onAudioProcess(const char* roomId, const char* peerId, throw; // 重新抛出异常 } } + std::cout << "step12" << std::endl; // 8. 释放资源 Py_DECREF(pyArray); + std::cout << "step13" << std::endl; PyGILState_Release(gstate); + std::cout << "step14" << std::endl; } catch (const std::exception& e) { std::cerr << "Audio process error: " << e.what() << std::endl;