update:修复内存泄漏

This commit is contained in:
Barry 2019-06-20 10:35:16 +08:00
parent b2c4da7243
commit 0bd076d4ae
7 changed files with 40 additions and 30 deletions

View file

@ -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)
{

View file

@ -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);

View file

@ -10,7 +10,7 @@
typedef struct AVFrame AVFrame;
class VideoBuffer
{
{
public:
VideoBuffer();
virtual ~VideoBuffer();

View file

@ -13,7 +13,8 @@
typedef qint32 (*ReadPacketFunc)(void*, quint8*, qint32);
Stream::Stream()
Stream::Stream(QObject *parent)
: QThread(parent)
{
m_quit.store(0);
}

View file

@ -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:

View file

@ -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);
}

View 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 = "";