mirror of
https://github.com/barry-ran/QtScrcpy.git
synced 2025-04-21 20:15:04 +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 "decoder.h"
|
||||
|
||||
Decoder::Decoder(VideoBuffer* vb)
|
||||
: QObject(Q_NULLPTR)
|
||||
Decoder::Decoder(VideoBuffer* vb, QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_vb(vb)
|
||||
{
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ class Decoder : public QObject
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
Decoder(VideoBuffer* vb);
|
||||
Decoder(VideoBuffer* vb, QObject *parent = Q_NULLPTR);
|
||||
virtual ~Decoder();
|
||||
|
||||
bool open(const AVCodec *codec);
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
typedef struct AVFrame AVFrame;
|
||||
|
||||
class VideoBuffer
|
||||
{
|
||||
{
|
||||
public:
|
||||
VideoBuffer();
|
||||
virtual ~VideoBuffer();
|
||||
|
|
|
@ -13,7 +13,8 @@
|
|||
|
||||
typedef qint32 (*ReadPacketFunc)(void*, quint8*, qint32);
|
||||
|
||||
Stream::Stream()
|
||||
Stream::Stream(QObject *parent)
|
||||
: QThread(parent)
|
||||
{
|
||||
m_quit.store(0);
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ public:
|
|||
qint32 remaining; // remaining bytes to receive for the current frame
|
||||
} ReceiverState;
|
||||
|
||||
Stream();
|
||||
Stream(QObject *parent = Q_NULLPTR);
|
||||
virtual ~Stream();
|
||||
|
||||
public:
|
||||
|
|
|
@ -19,7 +19,9 @@
|
|||
#include "ui_videoform.h"
|
||||
#include "iconhelper.h"
|
||||
#include "toolform.h"
|
||||
//#include "controlmsg.h"
|
||||
#include "filehandler.h"
|
||||
#include "stream.h"
|
||||
#include "server.h"
|
||||
#include "mousetap/mousetap.h"
|
||||
|
||||
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();
|
||||
|
||||
m_closeScreen = closeScreen;
|
||||
m_server = new Server();
|
||||
|
||||
m_vb = new VideoBuffer();
|
||||
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_fileHandler = new FileHandler(this);
|
||||
|
||||
if (!fileName.trimmed().isEmpty()) {
|
||||
m_recorder = new Recorder(fileName.trimmed());
|
||||
m_stream.setRecoder(m_recorder);
|
||||
m_stream->setRecoder(m_recorder);
|
||||
}
|
||||
|
||||
initSignals();
|
||||
|
@ -78,12 +84,14 @@ VideoForm::~VideoForm()
|
|||
{
|
||||
m_server->stop();
|
||||
// server must stop before decoder, because decoder block main thread
|
||||
m_stream.stopDecode();
|
||||
delete m_server;
|
||||
m_stream->stopDecode();
|
||||
|
||||
if (m_recorder) {
|
||||
delete m_recorder;
|
||||
}
|
||||
m_vb->deInit();
|
||||
}
|
||||
m_vb->deInit();
|
||||
delete m_vb;
|
||||
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
@ -139,7 +147,7 @@ void VideoForm::initUI()
|
|||
|
||||
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) {
|
||||
QMessageBox::warning(this, "QtScrcpy", tr("wait current file transfer to complete"), QMessageBox::Ok);
|
||||
}
|
||||
|
@ -183,8 +191,8 @@ void VideoForm::initSignals()
|
|||
}
|
||||
|
||||
// init decoder
|
||||
m_stream.setVideoSocket(m_server->getVideoSocket());
|
||||
m_stream.startDecode();
|
||||
m_stream->setVideoSocket(m_server->getVideoSocket());
|
||||
m_stream->startDecode();
|
||||
|
||||
// init controller
|
||||
m_controller->setControlSocket(m_server->getControlSocket());
|
||||
|
@ -200,7 +208,7 @@ void VideoForm::initSignals()
|
|||
qDebug() << "server process stop";
|
||||
});
|
||||
|
||||
connect(&m_stream, &Stream::onStreamStop, this, [this](){
|
||||
connect(m_stream, &Stream::onStreamStop, this, [this](){
|
||||
close();
|
||||
qDebug() << "stream thread stop";
|
||||
});
|
||||
|
@ -468,8 +476,8 @@ void VideoForm::dropEvent(QDropEvent *event)
|
|||
}
|
||||
|
||||
if (fileInfo.isFile() && fileInfo.suffix() == "apk") {
|
||||
m_fileHandler.installApkRequest(m_serial, file);
|
||||
m_fileHandler->installApkRequest(m_serial, file);
|
||||
return;
|
||||
}
|
||||
m_fileHandler.pushFileRequest(m_serial, file);
|
||||
m_fileHandler->pushFileRequest(m_serial, file);
|
||||
}
|
||||
|
|
|
@ -5,9 +5,6 @@
|
|||
#include <QPointer>
|
||||
#include <QTime>
|
||||
|
||||
#include "server.h"
|
||||
#include "stream.h"
|
||||
#include "filehandler.h"
|
||||
#include "controller.h"
|
||||
|
||||
namespace Ui {
|
||||
|
@ -18,6 +15,9 @@ class ToolForm;
|
|||
class Recorder;
|
||||
class VideoBuffer;
|
||||
class Decoder;
|
||||
class FileHandler;
|
||||
class Stream;
|
||||
class Server;
|
||||
class VideoForm : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -59,13 +59,14 @@ private:
|
|||
QPointer<QWidget> m_loadingWidget;
|
||||
|
||||
// server relevant
|
||||
Server* m_server = Q_NULLPTR;
|
||||
VideoBuffer* m_vb = Q_NULLPTR;
|
||||
Decoder* m_decoder = Q_NULLPTR;
|
||||
Recorder* m_recorder = Q_NULLPTR;
|
||||
QPointer<Server> m_server;
|
||||
QPointer<Decoder> m_decoder;
|
||||
QPointer<Controller> m_controller;
|
||||
Stream m_stream;
|
||||
FileHandler m_fileHandler;
|
||||
QPointer<FileHandler> m_fileHandler;
|
||||
QPointer<Stream> m_stream;
|
||||
|
||||
VideoBuffer* m_vb = Q_NULLPTR;
|
||||
Recorder* m_recorder = Q_NULLPTR;
|
||||
|
||||
// server params
|
||||
QString m_serial = "";
|
||||
|
|
Loading…
Add table
Reference in a new issue