修复video stack相关功能bug
Some checks are pending
Android / build (push) Waiting to run
CodeQL / Analyze (cpp) (push) Waiting to run
CodeQL / Analyze (javascript) (push) Waiting to run
Docker / build (push) Waiting to run
Linux / build (push) Waiting to run
macOS / build (push) Waiting to run
Windows / build (push) Waiting to run

/index/api/stack/reset 在相同url和通分辨率多次调用channel析构没画面的问题
是在 VideoStackManager::parseParams 函数里 多次 (*params)[i * cols + j] =
nullptr; 导致 channel 计数器为0,析构没画面。

同时修复cpu占用过高问题。
This commit is contained in:
sbkyy 2024-10-26 09:20:24 +08:00 committed by GitHub
parent 4c90a1a95b
commit 5c80c75ed9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -23,7 +23,11 @@
INSTANCE_IMP(VideoStackManager) INSTANCE_IMP(VideoStackManager)
Param::~Param() { VideoStackManager::Instance().unrefChannel(id, width, height, pixfmt); } Param::~Param() {
auto strongChn= weak_chn.lock();
if (!strongChn) { return; }
VideoStackManager::Instance().unrefChannel(id, width, height, pixfmt);
}
Channel::Channel(const std::string& id, int width, int height, AVPixelFormat pixfmt) Channel::Channel(const std::string& id, int width, int height, AVPixelFormat pixfmt)
: _id(id), _width(width), _height(height), _pixfmt(pixfmt) { : _id(id), _width(width), _height(height), _pixfmt(pixfmt) {
@ -278,7 +282,9 @@ void VideoStack::start() {
_dev->inputYUV((char**)_buffer->get()->data, _buffer->get()->linesize, pts); _dev->inputYUV((char**)_buffer->get()->data, _buffer->get()->linesize, pts);
pts += frameInterval; pts += frameInterval;
} } else {
std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
} }
}); });
} }