update:VideoForm成员变量m_decoder改为堆上创建

This commit is contained in:
Barry 2019-06-18 14:53:42 +08:00
commit 090a5113d1
4 changed files with 11 additions and 15 deletions

View file

@ -4,8 +4,9 @@
#include "videobuffer.h" #include "videobuffer.h"
#include "decoder.h" #include "decoder.h"
Decoder::Decoder() Decoder::Decoder(VideoBuffer* vb)
: QObject(Q_NULLPTR) : QObject(Q_NULLPTR)
, m_vb(vb)
{ {
} }
@ -15,11 +16,6 @@ Decoder::~Decoder()
} }
void Decoder::setVideoBuffer(VideoBuffer* vb)
{
m_vb = vb;
}
bool Decoder::open(const AVCodec *codec) bool Decoder::open(const AVCodec *codec)
{ {
// codec context // codec context

View file

@ -12,10 +12,9 @@ class Decoder : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
Decoder(); Decoder(VideoBuffer* vb);
virtual ~Decoder(); virtual ~Decoder();
void setVideoBuffer(VideoBuffer* vb);
bool open(const AVCodec *codec); bool open(const AVCodec *codec);
void close(); void close();
bool push(const AVPacket *packet); bool push(const AVPacket *packet);

View file

@ -15,6 +15,7 @@
#include "videoform.h" #include "videoform.h"
#include "recorder.h" #include "recorder.h"
#include "videobuffer.h" #include "videobuffer.h"
#include "decoder.h"
#include "ui_videoform.h" #include "ui_videoform.h"
#include "iconhelper.h" #include "iconhelper.h"
#include "toolform.h" #include "toolform.h"
@ -34,8 +35,8 @@ VideoForm::VideoForm(const QString& serial, quint16 maxSize, quint32 bitRate, co
m_server = new Server(); m_server = new Server();
m_vb = new VideoBuffer(); m_vb = new VideoBuffer();
m_vb->init(); m_vb->init();
m_decoder.setVideoBuffer(m_vb); m_decoder = new Decoder(m_vb);
m_stream.setDecoder(&m_decoder); m_stream.setDecoder(m_decoder);
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);
@ -189,7 +190,7 @@ void VideoForm::initSignals()
}); });
// must be Qt::QueuedConnection, ui update must be main thread // must be Qt::QueuedConnection, ui update must be main thread
connect(&m_decoder, &Decoder::onNewFrame, this, [this](){ connect(m_decoder, &Decoder::onNewFrame, this, [this](){
if (ui->videoWidget->isHidden()) { if (ui->videoWidget->isHidden()) {
if (m_loadingWidget) { if (m_loadingWidget) {
m_loadingWidget->close(); m_loadingWidget->close();

View file

@ -7,7 +7,6 @@
#include "server.h" #include "server.h"
#include "stream.h" #include "stream.h"
#include "decoder.h"
#include "inputconvertnormal.h" #include "inputconvertnormal.h"
#include "inputconvertgame.h" #include "inputconvertgame.h"
#include "filehandler.h" #include "filehandler.h"
@ -19,6 +18,7 @@ class videoForm;
class ToolForm; class ToolForm;
class Recorder; class Recorder;
class VideoBuffer; class VideoBuffer;
class Decoder;
class VideoForm : public QWidget class VideoForm : public QWidget
{ {
Q_OBJECT Q_OBJECT
@ -72,7 +72,8 @@ private:
QSize frameSize; QSize frameSize;
Server* m_server = Q_NULLPTR; Server* m_server = Q_NULLPTR;
Stream m_stream; Stream m_stream;
VideoBuffer* m_vb; VideoBuffer* m_vb = Q_NULLPTR;
Decoder* m_decoder = Q_NULLPTR;
//InputConvertNormal m_inputConvert; //InputConvertNormal m_inputConvert;
InputConvertGame m_inputConvert; InputConvertGame m_inputConvert;
FileHandler m_fileHandler; FileHandler m_fileHandler;
@ -83,7 +84,6 @@ private:
float m_widthHeightRatio = 0.5f; float m_widthHeightRatio = 0.5f;
QPointer<ToolForm> m_toolForm; QPointer<ToolForm> m_toolForm;
Recorder* m_recorder = Q_NULLPTR; Recorder* m_recorder = Q_NULLPTR;
Decoder m_decoder;
QTime m_startTimeCount; QTime m_startTimeCount;
QPointer<QWidget> m_loadingWidget; QPointer<QWidget> m_loadingWidget;
}; };