diff --git a/QtScrcpy/decoder/decoder.cpp b/QtScrcpy/decoder/decoder.cpp index aabd391..29912fd 100644 --- a/QtScrcpy/decoder/decoder.cpp +++ b/QtScrcpy/decoder/decoder.cpp @@ -57,7 +57,7 @@ qint32 Decoder::recvData(quint8* buf, qint32 bufSize) return 0; } if (m_deviceSocket) { - qint32 len = m_deviceSocket->recvData(buf, bufSize); + qint32 len = m_deviceSocket->subThreadRecvData(buf, bufSize); if (len == -1) { return AVERROR(errno); } diff --git a/QtScrcpy/server/devicesocket.cpp b/QtScrcpy/server/devicesocket.cpp index ebc3518..cac5bd4 100644 --- a/QtScrcpy/server/devicesocket.cpp +++ b/QtScrcpy/server/devicesocket.cpp @@ -1,4 +1,5 @@ #include +#include #include #include "qscrcpyevent.h" @@ -16,8 +17,10 @@ DeviceSocket::~DeviceSocket() quitNotify(); } -qint32 DeviceSocket::recvData(quint8 *buf, qint32 bufSize) +qint32 DeviceSocket::subThreadRecvData(quint8 *buf, qint32 bufSize) { + // this function cant call in main thread + Q_ASSERT(QCoreApplication::instance()->thread() != QThread::currentThread()); if (m_quit) { return 0; } diff --git a/QtScrcpy/server/devicesocket.h b/QtScrcpy/server/devicesocket.h index 87dcd2d..b7a303c 100644 --- a/QtScrcpy/server/devicesocket.h +++ b/QtScrcpy/server/devicesocket.h @@ -13,16 +13,14 @@ public: explicit DeviceSocket(QObject *parent = nullptr); virtual ~DeviceSocket(); - qint32 recvData(quint8* buf, qint32 bufSize); + qint32 subThreadRecvData(quint8* buf, qint32 bufSize); protected: bool event(QEvent *event); -public slots: - void quitNotify(); - protected slots: - void onReadyRead(); + void onReadyRead(); + void quitNotify(); private: QMutex m_mutex;