mirror of
https://github.com/barry-ran/QtScrcpy.git
synced 2025-07-29 20:28:38 +00:00
update:修复内存泄漏
This commit is contained in:
parent
b2c4da7243
commit
0bd076d4ae
7 changed files with 40 additions and 30 deletions
|
@ -4,8 +4,8 @@
|
||||||
#include "videobuffer.h"
|
#include "videobuffer.h"
|
||||||
#include "decoder.h"
|
#include "decoder.h"
|
||||||
|
|
||||||
Decoder::Decoder(VideoBuffer* vb)
|
Decoder::Decoder(VideoBuffer* vb, QObject *parent)
|
||||||
: QObject(Q_NULLPTR)
|
: QObject(parent)
|
||||||
, m_vb(vb)
|
, m_vb(vb)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ class Decoder : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
Decoder(VideoBuffer* vb);
|
Decoder(VideoBuffer* vb, QObject *parent = Q_NULLPTR);
|
||||||
virtual ~Decoder();
|
virtual ~Decoder();
|
||||||
|
|
||||||
bool open(const AVCodec *codec);
|
bool open(const AVCodec *codec);
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
typedef struct AVFrame AVFrame;
|
typedef struct AVFrame AVFrame;
|
||||||
|
|
||||||
class VideoBuffer
|
class VideoBuffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
VideoBuffer();
|
VideoBuffer();
|
||||||
virtual ~VideoBuffer();
|
virtual ~VideoBuffer();
|
||||||
|
|
|
@ -13,7 +13,8 @@
|
||||||
|
|
||||||
typedef qint32 (*ReadPacketFunc)(void*, quint8*, qint32);
|
typedef qint32 (*ReadPacketFunc)(void*, quint8*, qint32);
|
||||||
|
|
||||||
Stream::Stream()
|
Stream::Stream(QObject *parent)
|
||||||
|
: QThread(parent)
|
||||||
{
|
{
|
||||||
m_quit.store(0);
|
m_quit.store(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ public:
|
||||||
qint32 remaining; // remaining bytes to receive for the current frame
|
qint32 remaining; // remaining bytes to receive for the current frame
|
||||||
} ReceiverState;
|
} ReceiverState;
|
||||||
|
|
||||||
Stream();
|
Stream(QObject *parent = Q_NULLPTR);
|
||||||
virtual ~Stream();
|
virtual ~Stream();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -19,7 +19,9 @@
|
||||||
#include "ui_videoform.h"
|
#include "ui_videoform.h"
|
||||||
#include "iconhelper.h"
|
#include "iconhelper.h"
|
||||||
#include "toolform.h"
|
#include "toolform.h"
|
||||||
//#include "controlmsg.h"
|
#include "filehandler.h"
|
||||||
|
#include "stream.h"
|
||||||
|
#include "server.h"
|
||||||
#include "mousetap/mousetap.h"
|
#include "mousetap/mousetap.h"
|
||||||
|
|
||||||
VideoForm::VideoForm(const QString& serial, quint16 maxSize, quint32 bitRate, const QString& fileName, bool closeScreen, QWidget *parent) :
|
VideoForm::VideoForm(const QString& serial, quint16 maxSize, quint32 bitRate, const QString& fileName, bool closeScreen, QWidget *parent) :
|
||||||
|
@ -33,16 +35,20 @@ VideoForm::VideoForm(const QString& serial, quint16 maxSize, quint32 bitRate, co
|
||||||
initUI();
|
initUI();
|
||||||
|
|
||||||
m_closeScreen = closeScreen;
|
m_closeScreen = closeScreen;
|
||||||
m_server = new Server();
|
|
||||||
m_vb = new VideoBuffer();
|
m_vb = new VideoBuffer();
|
||||||
m_vb->init();
|
m_vb->init();
|
||||||
m_decoder = new Decoder(m_vb);
|
|
||||||
m_stream.setDecoder(m_decoder);
|
m_server = new Server(this);
|
||||||
|
m_decoder = new Decoder(m_vb, this);
|
||||||
|
m_stream = new Stream(this);
|
||||||
|
m_stream->setDecoder(m_decoder);
|
||||||
m_controller = new Controller(this);
|
m_controller = new Controller(this);
|
||||||
|
m_fileHandler = new FileHandler(this);
|
||||||
|
|
||||||
if (!fileName.trimmed().isEmpty()) {
|
if (!fileName.trimmed().isEmpty()) {
|
||||||
m_recorder = new Recorder(fileName.trimmed());
|
m_recorder = new Recorder(fileName.trimmed());
|
||||||
m_stream.setRecoder(m_recorder);
|
m_stream->setRecoder(m_recorder);
|
||||||
}
|
}
|
||||||
|
|
||||||
initSignals();
|
initSignals();
|
||||||
|
@ -78,12 +84,14 @@ VideoForm::~VideoForm()
|
||||||
{
|
{
|
||||||
m_server->stop();
|
m_server->stop();
|
||||||
// server must stop before decoder, because decoder block main thread
|
// server must stop before decoder, because decoder block main thread
|
||||||
m_stream.stopDecode();
|
m_stream->stopDecode();
|
||||||
delete m_server;
|
|
||||||
if (m_recorder) {
|
if (m_recorder) {
|
||||||
delete m_recorder;
|
delete m_recorder;
|
||||||
}
|
}
|
||||||
m_vb->deInit();
|
m_vb->deInit();
|
||||||
|
delete m_vb;
|
||||||
|
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,7 +147,7 @@ void VideoForm::initUI()
|
||||||
|
|
||||||
void VideoForm::initSignals()
|
void VideoForm::initSignals()
|
||||||
{
|
{
|
||||||
connect(&m_fileHandler, &FileHandler::fileHandlerResult, this, [this](FileHandler::FILE_HANDLER_RESULT processResult){
|
connect(m_fileHandler, &FileHandler::fileHandlerResult, this, [this](FileHandler::FILE_HANDLER_RESULT processResult){
|
||||||
if (FileHandler::FAR_IS_RUNNING == processResult) {
|
if (FileHandler::FAR_IS_RUNNING == processResult) {
|
||||||
QMessageBox::warning(this, "QtScrcpy", tr("wait current file transfer to complete"), QMessageBox::Ok);
|
QMessageBox::warning(this, "QtScrcpy", tr("wait current file transfer to complete"), QMessageBox::Ok);
|
||||||
}
|
}
|
||||||
|
@ -183,8 +191,8 @@ void VideoForm::initSignals()
|
||||||
}
|
}
|
||||||
|
|
||||||
// init decoder
|
// init decoder
|
||||||
m_stream.setVideoSocket(m_server->getVideoSocket());
|
m_stream->setVideoSocket(m_server->getVideoSocket());
|
||||||
m_stream.startDecode();
|
m_stream->startDecode();
|
||||||
|
|
||||||
// init controller
|
// init controller
|
||||||
m_controller->setControlSocket(m_server->getControlSocket());
|
m_controller->setControlSocket(m_server->getControlSocket());
|
||||||
|
@ -200,7 +208,7 @@ void VideoForm::initSignals()
|
||||||
qDebug() << "server process stop";
|
qDebug() << "server process stop";
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(&m_stream, &Stream::onStreamStop, this, [this](){
|
connect(m_stream, &Stream::onStreamStop, this, [this](){
|
||||||
close();
|
close();
|
||||||
qDebug() << "stream thread stop";
|
qDebug() << "stream thread stop";
|
||||||
});
|
});
|
||||||
|
@ -468,8 +476,8 @@ void VideoForm::dropEvent(QDropEvent *event)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileInfo.isFile() && fileInfo.suffix() == "apk") {
|
if (fileInfo.isFile() && fileInfo.suffix() == "apk") {
|
||||||
m_fileHandler.installApkRequest(m_serial, file);
|
m_fileHandler->installApkRequest(m_serial, file);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_fileHandler.pushFileRequest(m_serial, file);
|
m_fileHandler->pushFileRequest(m_serial, file);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
#include <QTime>
|
#include <QTime>
|
||||||
|
|
||||||
#include "server.h"
|
|
||||||
#include "stream.h"
|
|
||||||
#include "filehandler.h"
|
|
||||||
#include "controller.h"
|
#include "controller.h"
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
|
@ -18,6 +15,9 @@ class ToolForm;
|
||||||
class Recorder;
|
class Recorder;
|
||||||
class VideoBuffer;
|
class VideoBuffer;
|
||||||
class Decoder;
|
class Decoder;
|
||||||
|
class FileHandler;
|
||||||
|
class Stream;
|
||||||
|
class Server;
|
||||||
class VideoForm : public QWidget
|
class VideoForm : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -59,13 +59,14 @@ private:
|
||||||
QPointer<QWidget> m_loadingWidget;
|
QPointer<QWidget> m_loadingWidget;
|
||||||
|
|
||||||
// server relevant
|
// server relevant
|
||||||
Server* m_server = Q_NULLPTR;
|
QPointer<Server> m_server;
|
||||||
VideoBuffer* m_vb = Q_NULLPTR;
|
QPointer<Decoder> m_decoder;
|
||||||
Decoder* m_decoder = Q_NULLPTR;
|
|
||||||
Recorder* m_recorder = Q_NULLPTR;
|
|
||||||
QPointer<Controller> m_controller;
|
QPointer<Controller> m_controller;
|
||||||
Stream m_stream;
|
QPointer<FileHandler> m_fileHandler;
|
||||||
FileHandler m_fileHandler;
|
QPointer<Stream> m_stream;
|
||||||
|
|
||||||
|
VideoBuffer* m_vb = Q_NULLPTR;
|
||||||
|
Recorder* m_recorder = Q_NULLPTR;
|
||||||
|
|
||||||
// server params
|
// server params
|
||||||
QString m_serial = "";
|
QString m_serial = "";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue