From 0bd076d4ae57fc3294741d54dee45d230550ebee Mon Sep 17 00:00:00 2001 From: Barry <870709864@qq.com> Date: Thu, 20 Jun 2019 10:35:16 +0800 Subject: [PATCH] =?UTF-8?q?update:=E4=BF=AE=E5=A4=8D=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=B3=84=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- QtScrcpy/decoder/decoder.cpp | 4 ++-- QtScrcpy/decoder/decoder.h | 2 +- QtScrcpy/decoder/videobuffer.h | 2 +- QtScrcpy/stream/stream.cpp | 3 ++- QtScrcpy/stream/stream.h | 2 +- QtScrcpy/videoform.cpp | 38 ++++++++++++++++++++-------------- QtScrcpy/videoform.h | 19 +++++++++-------- 7 files changed, 40 insertions(+), 30 deletions(-) diff --git a/QtScrcpy/decoder/decoder.cpp b/QtScrcpy/decoder/decoder.cpp index eaf76e0..2ce622a 100644 --- a/QtScrcpy/decoder/decoder.cpp +++ b/QtScrcpy/decoder/decoder.cpp @@ -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) { diff --git a/QtScrcpy/decoder/decoder.h b/QtScrcpy/decoder/decoder.h index b493e46..a0ba971 100644 --- a/QtScrcpy/decoder/decoder.h +++ b/QtScrcpy/decoder/decoder.h @@ -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); diff --git a/QtScrcpy/decoder/videobuffer.h b/QtScrcpy/decoder/videobuffer.h index 52264ec..7138fd1 100644 --- a/QtScrcpy/decoder/videobuffer.h +++ b/QtScrcpy/decoder/videobuffer.h @@ -10,7 +10,7 @@ typedef struct AVFrame AVFrame; class VideoBuffer -{ +{ public: VideoBuffer(); virtual ~VideoBuffer(); diff --git a/QtScrcpy/stream/stream.cpp b/QtScrcpy/stream/stream.cpp index 42938e5..dbe7eb1 100644 --- a/QtScrcpy/stream/stream.cpp +++ b/QtScrcpy/stream/stream.cpp @@ -13,7 +13,8 @@ typedef qint32 (*ReadPacketFunc)(void*, quint8*, qint32); -Stream::Stream() +Stream::Stream(QObject *parent) + : QThread(parent) { m_quit.store(0); } diff --git a/QtScrcpy/stream/stream.h b/QtScrcpy/stream/stream.h index f10d3f8..4f075ba 100644 --- a/QtScrcpy/stream/stream.h +++ b/QtScrcpy/stream/stream.h @@ -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: diff --git a/QtScrcpy/videoform.cpp b/QtScrcpy/videoform.cpp index 7199a8c..116450e 100644 --- a/QtScrcpy/videoform.cpp +++ b/QtScrcpy/videoform.cpp @@ -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); } diff --git a/QtScrcpy/videoform.h b/QtScrcpy/videoform.h index c4089a2..7e9d02c 100644 --- a/QtScrcpy/videoform.h +++ b/QtScrcpy/videoform.h @@ -5,9 +5,6 @@ #include #include -#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 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 m_server; + QPointer m_decoder; QPointer m_controller; - Stream m_stream; - FileHandler m_fileHandler; + QPointer m_fileHandler; + QPointer m_stream; + + VideoBuffer* m_vb = Q_NULLPTR; + Recorder* m_recorder = Q_NULLPTR; // server params QString m_serial = "";