fix: 修复视频播放时关闭程序崩溃问题

map
cbwu 1 week ago
parent 3b11048e1b
commit 272d18d20a

@ -103,6 +103,7 @@ void MainWindow::closeEvent(QCloseEvent *event) {
m_mapWidget->close(); m_mapWidget->close();
delete m_mapWidget; delete m_mapWidget;
} }
// QMainWindow::close();
} }
void MainWindow::initSignalConnection() { void MainWindow::initSignalConnection() {

@ -83,7 +83,7 @@ private slots:
private: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;
VideoWidget *videoWidget1 = nullptr; // VideoWidget *videoWidget1 = nullptr;
CommunicationSettingDlg settingDlg; CommunicationSettingDlg settingDlg;
StreamAddrSettingsDlg streamAddrSettingsDlg; StreamAddrSettingsDlg streamAddrSettingsDlg;
QWK::WidgetWindowAgent *windowAgent; QWK::WidgetWindowAgent *windowAgent;

@ -41,8 +41,8 @@ private:
bool m_bwriteHeader = false; bool m_bwriteHeader = false;
int m_videoIndex = -1; int m_videoIndex = -1;
QString m_pushStreamIP; // 推流地址 QString m_pushStreamIP; // 推流地址
bool m_start = false; std::atomic<bool> m_start = false;
bool m_end = false; std::atomic<bool> m_end = false;
int64_t m_startTime; int64_t m_startTime;
int64_t m_firstPts; int64_t m_firstPts;
int m_frm_cnt = 0; int m_frm_cnt = 0;

@ -123,7 +123,7 @@ void SaveStream::startSaveStream() {
} }
free(); free();
qDebug() << "视频保存结束"; qDebug() << "Save Video End";
emit sendErrorMessageSignal("视频保存结束!", 1); emit sendErrorMessageSignal("视频保存结束!", 1);
} }

@ -45,7 +45,7 @@ private:
int m_videoIndex = 0; int m_videoIndex = 0;
bool m_writeHeader = false; // 是否写入文件头 bool m_writeHeader = false; // 是否写入文件头
QString m_outputDirPath; QString m_outputDirPath;
bool m_start; std::atomic<bool> m_start;
// QQueue<AVPacket *> *m_saverQueue; // QQueue<AVPacket *> *m_saverQueue;
AVPacketQueueManager *m_queueManager = nullptr; AVPacketQueueManager *m_queueManager = nullptr;

@ -19,10 +19,9 @@ VideoWidget::VideoWidget(QWidget *parent, Qt::WindowFlags f)
#endif #endif
VideoWidget::~VideoWidget() { VideoWidget::~VideoWidget() {
if (!isValid()) // bool bbbb = isValid();
return; // 如果控件和OpenGL资源如上下文已成功初始化则返回true。
decodeStreamer->disconnect(this); // decodeStreamer->disconnect(this);
stopPlay(); stopPlay();
stopPushStream(); stopPushStream();
@ -39,6 +38,9 @@ VideoWidget::~VideoWidget() {
streamPusher->deleteLater(); streamPusher->deleteLater();
} }
if (!isValid())
return; // 如果控件和OpenGL资源如上下文已成功初始化则返回true。
// 通过将相应的上下文设置为当前上下文并在该上下文中绑定帧缓冲区对象为呈现此小部件的OpenGL内容做准备。 // 通过将相应的上下文设置为当前上下文并在该上下文中绑定帧缓冲区对象为呈现此小部件的OpenGL内容做准备。
this->makeCurrent(); this->makeCurrent();

Loading…
Cancel
Save